我有以下型号:
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.Mvc
和System.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]
属性应用于这些属性?有什么想法吗?
答案 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)都相同。