【问题标题】:How can you clear a bound property on a Razor Page's model when POSTing?发布时如何清除 Razor 页面模型上的绑定属性?
【发布时间】:2019-02-03 02:54:17
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你的意思是“但它不起作用。”?
  • 这很难理解你希望被清除的东西——属性、html 字段、数据库中的东西等等。
  • @SeM 我期待被清除,我所说的我试图清除的,绑定的属性名为 ContactName。我什至解释了我是如何尝试清除它的。

标签: c# asp.net-core razor-pages


【解决方案1】:

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

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

【讨论】:

  • 啊。这很有意义。非常感谢您的帮助。当我重定向回页面时,它按预期工作。 return RedirectToPage("PageName");
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 2021-09-17
  • 2020-11-06
  • 2021-01-25
  • 2017-05-13
  • 2020-04-04
  • 2019-08-02
  • 2012-04-02
相关资源
最近更新 更多