10

我有以下模型:

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 源代码甚至没有显示 hidden 属性。

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

4

6 回答 6

9

就我而言,我不得不写[HiddenInput]as[HiddenInput(DisplayValue=false)]

于 2015-01-26T17:47:43.640 回答
6

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

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

于 2012-12-20T12:12:17.530 回答
2

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

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

于 2014-03-23T20:39:26.147 回答
2

我有同样的问题。

原来我在包含模型的项目中有 System.Web.Mvc 的 5.2.2.0 版本,在 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 应用程序项目相同的版本。您可能需要这样做。

于 2014-12-09T16:27:20.090 回答
1

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

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

@Html.HiddenFor(model => model.Id)
于 2012-06-15T14:22:49.940 回答
0

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

于 2017-12-14T04:15:04.240 回答