Razor 页面视图在重新显示时呈现原始表单值而不是修改
Razor pages view renders original form value instead of modified when reshown
从 ASP.NET 核心 MVC 转移到 Razor 页面,我对将数据传递到 Razor 视图的理解一定有问题。
这是一个简单的视图:
@page
@model TestModel
@{
System.Diagnostics.Debug.WriteLine(Model.Name);
}
<form class="form-horizontal" method="get">
Name: <input type="text" class="form-control" asp-for="Name">
<button type="submit" class="btn btn-default">Send...</button>
</form>
下面是带有一个事件处理程序的视图模型class:
public class TestModel : PageModel
{
[BindProperty(SupportsGet = true)]
public string Name { get; set; } = "";
public TestModel() {}
public IActionResult OnGet()
{
Name += "N";
return Page();
}
}
然后运行项目:
Debug.WriteLine 按预期显示“N”
输入字段具有预期的“N”个默认值
在输入字段中覆盖“N”,例如。到“A”然后按发送按钮
Debug.WriteLine 按预期显示“AN”,因此视图已获得由 OnGet()
修改的值
页面中的输入字段本身包含值“A”而不是“AN”,生成的HTML包含:
值="A"
视图不呈现修改后的 Model.Name 值,而是呈现表单数据中的原始值。
如何修正使视图渲染修改后的字符串?
您可以尝试在客户端的OnGet handler.When绑定数据中添加ModelState.Clear();
,它会在模型之前从ModelState
获取值。
public class TestModel : PageModel
{
[BindProperty(SupportsGet = true)]
public string Name { get; set; } = "";
public TestModel() {}
public IActionResult OnGet()
{
Name += "N";
ModelState.Clear();
return Page();
}
}
从 ASP.NET 核心 MVC 转移到 Razor 页面,我对将数据传递到 Razor 视图的理解一定有问题。
这是一个简单的视图:
@page
@model TestModel
@{
System.Diagnostics.Debug.WriteLine(Model.Name);
}
<form class="form-horizontal" method="get">
Name: <input type="text" class="form-control" asp-for="Name">
<button type="submit" class="btn btn-default">Send...</button>
</form>
下面是带有一个事件处理程序的视图模型class:
public class TestModel : PageModel
{
[BindProperty(SupportsGet = true)]
public string Name { get; set; } = "";
public TestModel() {}
public IActionResult OnGet()
{
Name += "N";
return Page();
}
}
然后运行项目:
Debug.WriteLine 按预期显示“N”
输入字段具有预期的“N”个默认值
在输入字段中覆盖“N”,例如。到“A”然后按发送按钮
Debug.WriteLine 按预期显示“AN”,因此视图已获得由 OnGet()
修改的值页面中的输入字段本身包含值“A”而不是“AN”,生成的HTML包含:
值="A"
视图不呈现修改后的 Model.Name 值,而是呈现表单数据中的原始值。
如何修正使视图渲染修改后的字符串?
您可以尝试在客户端的OnGet handler.When绑定数据中添加ModelState.Clear();
,它会在模型之前从ModelState
获取值。
public class TestModel : PageModel
{
[BindProperty(SupportsGet = true)]
public string Name { get; set; } = "";
public TestModel() {}
public IActionResult OnGet()
{
Name += "N";
ModelState.Clear();
return Page();
}
}