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

时间:2012-06-15 14:10:02

标签: asp.net-mvc asp.net-mvc-3 razor

我有以下型号:

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; }
}

我引用了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")

}

问题在于[Required]注释正常工作时[HiddenInput]字段实际上并未隐藏。 html源甚至没有显示隐藏属性。

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

6 个答案:

答案 0 :(得分:9)

在我的情况下,我必须将[HiddenInput]写为[HiddenInput(DisplayValue=false)]

答案 1 :(得分:7)

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

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

答案 2 :(得分:2)

在我的情况下,导致此问题的原因是包含模型类和主Web应用程序项目的程序集引用了不同版本的System.Web.Mvc程序集。

如果您有几个引用System.Web.Mvc程序集的项目 - 请确保所有项目中使用的版本相同。

答案 3 :(得分:2)

我遇到了同样的问题。

原来我在项目中有版本5.2.2.0的System.Web.Mvc,其中包含Web应用程序项目中的模型和5.2.0.0。

要安装正确的版本,您需要在NuGet包管理器中运行以下命令:

  

install-package Microsoft.Aspnet.Mvc ProjectName -version X

将ProjectName替换为项目名称,将X替换为需要安装的版本。

例如:

  

install-package Microsoft.Aspnet.Mvc TestProject.Web -version 5.2.2.0

如果省略版本号,NuGet将只下载并安装最新版本。

完成此操作后,我还需要将单元测试项目更新为与Web应用程序项目相同的版本。您可能需要这样做。

答案 4 :(得分:1)

如果使用scaffolding,生成器将使用视图中隐藏的类型设置输入标记。 这取决于T4模板。

如果手动创建视图,则必须手动设置该字段。 e.g

@Html.HiddenFor(model => model.Id)

答案 5 :(得分:0)

我也有这个问题。由于System.Web.Mvc的不同版本在同一解决方案的不同项目中,因此问题发生了。我删除并再次添加引用,以便所有项目(4.0.0.1)都相同。