MVC4剃须刀 - @ Html.DisplayFor不具约束力的模型(MVC4 Razor -

2019-06-25 12:36发布

我想找到我的脚MVC4剃刀和我坚持这个简单的问题。

当我使用@ Html.DisplayFor模型总是发回为NULL,但是当我使用@ Html.TextBoxFor这种模式是完全填充的,我缺少什么?

提前致谢

Answer 1:

这是一个常见的问题,很多人在asp.net mvc框架错过。 不只是在助手等方面的差异HiddenForDisplayForTextBoxFor -但究竟如何框架设置自动收集和验证这些输入。 神奇的是所有HTML5的数据 - *属性来完成。 看着输入标签产生的,有要在形式一些额外的属性时,你会发现data-valdata-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?"

你可以用二重奏做到这一点HiddenForDisplayFor 。 使用HiddenFor有准备张贴的价值观,并DisplayFor显示这些值。



Answer 2:

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" />
}


Answer 3:

同时使用DisplayForHiddenForDisplayFor简单地显示文本,而不是一个输入字段,从而,它没有回发。 HiddenFor实际上创建<input type="hidden" value="xxxx"/>



Answer 4:

DisplayFor建立了一个HTML标签,而不是输入。 标签不会发布到服务器,但输入是。



Answer 5:

你表单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"/>


Answer 6:

我知道这是一个有点老问题,但你可以滚你自己的自定义组合显示控制,如下图所示。 这使得模型值后面的隐藏字段该值

@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());
}


文章来源: MVC4 Razor - @Html.DisplayFor not binding to model