我遇到一个问题,当我尝试调试 Razor 页面应用程序中的
OnGet()
方法时,该方法未被调用。因此,某些属性(如名称)的值在调试期间不会按预期更新。这是我的设置的细分:
问题描述
我有一个 Razor 页面 (
TestModel.cshtml.cs
),其中有一个 OnGet()
方法,我可以在其中更新 Name 属性。但是,当我设置断点并调试应用程序时,未调用 OnGet()
方法,因此,Name 的值未更新。
这是我的代码的简化版本:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace WebApplication1.Pages
{
public class TestModel : PageModel
{
public string Name { get; set; }
public string Description { get; set; }
public void OnGet()
{
Name = "Test";
Description = "This is a test name.";
}
}
}
这是我的 Razor 页面 (
Test.cshtml
):
@page
@model WebApplication1.Pages.TestModel
<h1>Hello, @Model.Name!</h1>
<p>@Model.Description</p>`
问题是,当我在
OnGet()
方法中设置断点并尝试调试应用程序时,永远不会命中断点,因此,Name
的值不会更新。但是,在正常执行期间,该值会正确更新。
我已经尝试过使用
[BindProperties]
属性,但它仅在正常执行期间有效,在调试期间无效。
以下是我排除故障所采取的一些步骤:
尽管做出了这些努力,我仍然无法调试
OnGet()
方法。
我遇到了 Razor 页面中的 OnGet() 方法的问题 当我尝试调试应用程序时,它没有被调用。最后, 某些属性的值(例如名称)不会更新为 调试期间预期。
根据您的场景和描述,看来您遵循的调试方法是正确的。我已尝试调查你的问题。根据我的测试结果,我认为这不是因为您的代码,而是因为您的 Visual Studio 配置导致了该问题。可能有些配置不正确。
我建议您仔细检查 Visual Studio 中的调试设置。确保选择要调试的项目并将启动操作设置为“IIS Express”或您首选的 Web 服务器。另外,请在你的Visual Studio中检查此配置,
Suppress JIT optimization on module load
应取消选中。
当我测试时,我已经成功地启动了调试器并得到了预期的结果。
这是我所做的详细步骤:
我创建了剃刀页面项目,如下所示:
输出:
注意:请参阅此官方文档,以获得更多帮助。