MVC4 Razor - @ Html.DisplayFor不绑定到模型

Jac*_*ues 33 asp.net-mvc razor

我试图用MVC4 Razor找到我的脚,我坚持这个简单的问题.

当我使用@ Html.DisplayFor时,模型总是以NULL形式返回,但是当我使用@ Html.TextBoxFor这个模型完全填充时,我缺少什么?

提前致谢

Tra*_*s J 61

这是许多人在asp.net mvc框架中遗漏的常见问题.不只是在助手等方面的差异HiddenFor,DisplayFor,TextBoxFor但框架究竟如何设置自动收集和验证这些输入- .魔术都是用HTML5的data-*属性完成的.看着输入标签产生的,有要在形式一些额外的属性时,你会发现data-val,data-val-required和也许对于某些类型的附加数据的属性,例如NUMERICS会data-val-number.

这些数据属性允许jQuery扩展jquery.validate.unobtrusive.js解析DOM,然后决定要验证哪些字段或生成错误消息.

已发布数据的实​​际收集将从该name属性中反映出来.这应该映射到c#或vb [HttpPost]方法中的模型.

HiddenFor当您想要提供用户不需要注意的发布数据时使用.

使用DisplayFor时要显示的记录,但不允许他们被editted.

使用TextBoxFor时,要允许用户输入或允许用户编辑的字段.

编辑

"the purpose of this view is to enable the user to view the data before submitting it to the database. Any ideas how I can achieve this?"

你可以用HiddenFor和二人组完成这个DisplayFor.用于HiddenFor准备发布值,并DisplayFor显示这些值.


Shy*_*yju 16

DisplayFor不会做模型绑定.TextBoxFor会这样做,因为它input在表单中创建一个元素,表单可以在发布时处理它.如果你想在HttpPost动作中获得一些数据并且你不想使用TextBoxFor,你可以使用HiddenFor像这样的HTML帮助方法将该pirticulare模型proeprty保存在表单内的隐藏变量中.

@using(Html.BeginForm())
{
  <p>The Type Name is</p> @Html.DisplayFor(x=>x.TypeName)
  @Html.HiddenFor(x=>x.TypeName)
  <input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)


小智 6

使用DisplayForHiddenFor.DisplayFor只显示文本而不是输入字段,因此不会回发. HiddenFor实际创造<input type="hidden" value="xxxx"/>