发布时如何清除 Razor 页面模型上的绑定属性?

ern*_*est 5 c# asp.net-core razor-pages

我有一个绑定到输入字段的属性:

<input id="name" asp-for="ContactName" name="ContactName" placeholder="Name" type="text" style="width: 200px !important;" autofocus>

[BindProperty]
public string ContactName { get; set; }
Run Code Online (Sandbox Code Playgroud)

当我发布时,我尝试ContactName通过将其设置为 NULL 或 string.Empty 来清除该属性,但它不起作用。

清除此字段的正确方法是什么?

Chr*_*att 8

“正确”的方法是遵循 PRG (Post-Redirect-Get) 模式。您输入的值来自ModelState,而不是ModelModelState, 本身由来自RequestViewData/的值组成ViewBag最后是模型。换句话说,如果某个绑定成员的值存在于类似 中Request,则该值将优先于您在模型上设置的任何内容。

PRG 模式指示您应该只在出现验证错误时将视图返回给用户。在这种情况下,您希望显示发布的数据而不是模型上的数据,以便用户可以纠正任何错误。如果用户的输入有效,即使它返回到同一页面,您也会重定向。重定向的行为会清除帖子中的所有内容。这就像您第一次来到该页面,因为实际上,这是一个全新的 GET 请求。

  • 啊。这很有意义。非常感谢您的帮助。当我重定向回页面时,它按预期工作。`return RedirectToPage("PageName");` (2认同)