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 来清除该属性,但它不起作用。
清除此字段的正确方法是什么?
“正确”的方法是遵循 PRG (Post-Redirect-Get) 模式。您输入的值来自ModelState,而不是Model。ModelState, 本身由来自Request、ViewData/的值组成ViewBag,最后是模型。换句话说,如果某个绑定成员的值存在于类似 中Request,则该值将优先于您在模型上设置的任何内容。
PRG 模式指示您应该只在出现验证错误时将视图返回给用户。在这种情况下,您希望显示发布的数据而不是模型上的数据,以便用户可以纠正任何错误。如果用户的输入有效,即使它返回到同一页面,您也会重定向。重定向的行为会清除帖子中的所有内容。这就像您第一次来到该页面,因为实际上,这是一个全新的 GET 请求。