【问题标题】:MVC posted valuesMVC 发布值
【发布时间】:2009-10-30 12:56:53
【问题描述】:

在 asp.net MVC 应用程序中,我们有机制,当我们提交时 一个表格,如果值有任何问题(验证失败), 表单显示回保持旧值。它是怎么发生的? 这些值保存在哪里?或者他们从 FormCollection 收集。

将获得帮助。

问候 帕尔米德

【问题讨论】:

  • 你好 parminder 你好吗,你出生在印度旁遮普邦
  • 我在 MVC 4 中遇到了完全相同的问题。更正无效字段值并重新提交表单后,FormCollection 显示的是旧值(来自第一次提交)而不是来自第二次提交的当前值提交。

标签: asp.net-mvc formcollection


【解决方案1】:

这实际上取决于您如何设置控制器操作和视图,因为 ASP.NET MVC 在多个位置查找值。

您假设它使用 FormCollection 有点错误,因为 FormCollection 是您的控制器 Action 作为参数接收的东西,并且与您的 View 完全分开,而 View 最终会显示这些值。

在 1.0 中,默认情况下,视图的编辑模板在大多数 HtmlHelpers 上使用第二个参数,例如:

<%=Html.Textbox("Title", Model.ID)%>

这将从绑定的模型对象中提取旧值。因此,如果您显式验证失败并返回 View(object),则将从该对象中提取值。不过,如果您明确未能通过验证,例如:

if (ModelState.IsValid == false)
{
    return View();
}

那么HtmlHelper代码很可能会出错,因为没有绑定Model。

如果你完全不使用第二个参数,比如:

<%=Html.Textbox("Title")%>

该值将从帖子 (Request.Form) 值中提取。

【讨论】:

  • 我认为你完全误解了这个问题。他是说上传表单后,控制器中的 Formcollection 错误。您在这里谈论的是视图,但这与视图无关。
  • 他并没有说有什么问题,他是在问旧值如何再次显示(意思是视图显示)。
  • 他说回发的表单保留了以前提交的旧值。我遇到了完全相同的问题。
【解决方案2】:

一种方法是使用 ModelState.AddModelError

可以找到关于 MVC 错误处理的好教程 here

【讨论】:

    【解决方案3】:

    您可以通过返回带有数据的视图来做到这一点

    if (ModelState.IsValid == false) 
    {
    return View(X);
    }
    

    X是你需要返回的数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2017-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多