我想找到我的脚MVC4剃刀和我坚持这个简单的问题。
当我使用@ Html.DisplayFor模型总是发回为NULL,但是当我使用@ Html.TextBoxFor这种模式是完全填充的,我缺少什么?
提前致谢
我想找到我的脚MVC4剃刀和我坚持这个简单的问题。
当我使用@ Html.DisplayFor模型总是发回为NULL,但是当我使用@ Html.TextBoxFor这种模式是完全填充的,我缺少什么?
提前致谢
这是一个常见的问题,很多人在asp.net mvc框架错过。 不只是在助手等方面的差异HiddenFor
, DisplayFor
, TextBoxFor
-但究竟如何框架设置自动收集和验证这些输入。 神奇的是所有HTML5的数据 - *属性来完成。 看着输入标签产生的,有要在形式一些额外的属性时,你会发现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
显示这些值。
DisplayFor
不会做模型绑定。 TextBoxFor
这样做,因为它会创建一个input
表单元素和形式可以处理它被公布时。 如果你想在HttpPost采取行动的一些数据,你不想使用TextBoxFor,您可以使用保留该pirticulare模型广告载体在一个隐藏变量的形式里面HiddenFor
这样的HTML辅助方法。
@using(Html.BeginForm())
{
<p>The Type Name is</p> @Html.DisplayFor(x=>x.TypeName)
@Html.HiddenFor(x=>x.TypeName)
<input type="submit" value="Save" />
}
同时使用DisplayFor
和HiddenFor
。 DisplayFor
简单地显示文本,而不是一个输入字段,从而,它没有回发。 HiddenFor
实际上创建<input type="hidden" value="xxxx"/>
DisplayFor
建立了一个HTML标签,而不是输入。 标签不会发布到服务器,但输入是。
你表单POST过程中是什么意思? 如果你使用DisplayFor,这将创建不包含任何形式值的元素。 通常,您结合使用这些数据相互创建标签为你的文本框,然后使用Html.TextBoxFor允许用户修改数据元素。
例:
@Html.DisplayFor(x=>x.Item)
@Html.TextBoxFor(x=>x.Item)
将呈现
Item <a text input field following>
或HTML
<label for="Item">Item</label><input type="Text" id="Item" name="Item"/>
我知道这是一个有点老问题,但你可以滚你自己的自定义组合显示控制,如下图所示。 这使得模型值后面的隐藏字段该值
@Html.DisplayExFor(model => Model.ItemCode)
只需使用什么框架已经到位
public static MvcHtmlString DisplayExFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> ex)
{
var sb = new StringBuilder();
sb.Append(htmlHelper.DisplayFor(ex));
sb.Append(htmlHelper.HiddenFor(ex));
return MvcHtmlString.Create(sb.ToString());
}