在Razor中使用Html.EditorForModel渲染时ASP.Net [HiddenInput]数据属性不起作用?

Jos*_*ews 10 asp.net-mvc razor asp.net-mvc-3

我有以下型号:

public class Product
{
    [HiddenInput(DisplayValue = false)]
    public int ProductID { get; set; }

    [Required(ErrorMessage="Please enter a product name")]
    public string Name { get; set; }

    [Required(ErrorMessage="Please enter a description")]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [Required]
    [Range(0.01, double.MaxValue, ErrorMessage="Please enter a positive price")]
    public decimal Price { get; set; }

    [Required(ErrorMessage="Please specify a category")]
    public string Category { get; set; }

    public byte[] ImageData { get; set; }

    [HiddenInput(DisplayValue = false)]
    public string ImageMimeType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在引用System.Web.MvcSystem.ComponentModel.DataAnnotations.

然后我在我的视图中将其呈现如下:

<h1>Edit @Model.Name</h1>

@using (Html.BeginForm("Edit", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" })) {
@Html.EditorForModel()

<div class="editor-lable">Image</div>
<div class="editor-=field">
    @if (Model.ImageData == null)
    {
        @:None
        }
    else
    {
        <img width="150" height="150" src="@Url.Action("GetImage", "Product", new { Model.ProductID })" />
    }
    <div>Upload new image: <input type="file" name="Image" . /></div>
</div>
<input type="submit" value="Save" />
@Html.ActionLink("Cancel and return to List", "Index")
Run Code Online (Sandbox Code Playgroud)

}

问题是,虽然[Required]注释工作正常,但[HiddenInput]字段实际上并没有隐藏.html源甚至没有显示隐藏属性.

为什么不Html.EditorForModel[HiddenInput]属性应用于这些属性?有任何想法吗?

Ach*_*les 9

在我的情况下,我不得不写[HiddenInput]as[HiddenInput(DisplayValue=false)]

  • 从MVC 5开始,这对我也有用. (2认同)

Jua*_*uan 7

我有一个类似的问题,在我的情况下,问题是由于System.Web.Mvc引用引起的.

我正在创建一个MVC 3应用程序,但是我没有添加System.Web.Mvc的版本3,而是添加了版本4.

  • 非常感谢,我遇到了MVC4和MVC5的问题 (2认同)

the*_*rce 1

如果您使用脚手架,生成器将设置输入标签,并将其类型隐藏在您的视图中。这取决于 T4 模板。

如果手动创建视图,则必须手动设置字段。例如

@Html.HiddenFor(model => model.Id)
Run Code Online (Sandbox Code Playgroud)