显示HTML.HiddenFor或Save Display中的内容

时间:2013-07-18 21:13:33

标签: asp.net-mvc razor

叫我疯了,但这看起来非常多余和不必要,但对于我的生活,我找不到能够实现两者的功能。

using Html.BeginForm("Save, Home") {


   @Html.DisplayFor(x => x.Id)
   @Html.HiddenFor(x => x.Id)

   @Html.DisplayFor(x => x.CreatedDate)
   @Html.HiddenFor(x => x.CreatedDate)

   //Useful fields below

}

让我解释一下 - 我想保存CreatedDate和Id值,因此隐藏了。这当然会在幕后产生输入,但我也需要显示它。 DisplayFor和ValueFor都在表单提交时返回Id = 0。更具体地说,当我更新表单中的数据时,我想保留这两个值。返回的模型将它们设置为0 / Datetime 0年。

有没有办法为下一个模型保存这些值?

1 个答案:

答案 0 :(得分:2)

您可以创建一个扩展方法:

public static class HtmlHelperExtensions
{
    public static IHtmlString DisplayAndHiddenFor<TModel, TProperty>(
        this HtmlHelper<TModel> helper, 
        Func<TModel, TProperty> propertyAccessor)
    {
        return new HtmlString(
            helper.DisplayFor(propertyAccessor).ToHtmlString()
            + helper.HiddenFor(propertyAccessor).ToHtmlString());
    }
}

像这样使用(当然使用正确的using):

@Html.DisplayAndHiddenFor(x => x.Id)
@Html.DisplayAndHiddenFor(x => x.CreatedDate)