首页 > 解决方案 > 发布时如何清除 Razor 页面模型上的绑定属性?

问题描述

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

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

[BindProperty]
public string ContactName { get; set; }

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

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

标签: c#asp.net-corerazor-pages

解决方案


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

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


推荐阅读