Ответ 1
И в моем случае мне пришлось написать [HiddenInput]
как [HiddenInput(DisplayValue=false)]
У меня есть следующая модель:
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]
к этим свойствам? Любые идеи?
И в моем случае мне пришлось написать [HiddenInput]
как [HiddenInput(DisplayValue=false)]
У меня была аналогичная проблема, в моем случае проблема была вызвана из-за ссылки System.Web.Mvc.
Я создавал приложение MVC 3, но вместо добавления версии 3 в System.Web.Mvc я добавил версию 4.
В моем случае причиной этой проблемы было то, что сборка, содержащая модельный класс и основной проект веб-приложения, имела ссылки на различные версии сборки System.Web.Mvc.
Если у вас есть несколько проектов, ссылающихся на сборку System.Web.Mvc - убедитесь, что используемая версия во всех проектах одинакова.
У меня была та же проблема.
Оказалось, что у меня была версия 5.2.2.0 System.Web.Mvc в проекте, который содержал эту модель и 5.2.0.0 в проекте веб-приложения.
Чтобы установить правильную версию, вам нужно запустить следующее в man-сервере NuGet:
install-package Microsoft.Aspnet.Mvc ProjectName -version X
заменить имя_проекта на имя вашего проекта и X с версией, которую вам нужно установить.
Например:
install-package Microsoft.Aspnet.Mvc TestProject.Web -version 5.2.2.0
Если вы опустите номер версии, NuGet просто загрузит и установит последнюю версию.
Как только я это сделал, мне также нужно было обновить проект unit test, чтобы он был в той же версии, что и проект веб-приложения. Возможно, вам придется сделать то же самое.
Если вы используете строительные леса, генератор установит входной тег с типом, скрытым в вашем представлении. Это зависит от шаблона T4.
Если вы создаете представление вручную, вы должны установить это поле вручную. например
@Html.HiddenFor(model => model.Id)
У меня тоже была эта проблема. Проблема возникала из-за разных версий System.Web.Mvc в разных проектах одного и того же решения. Я удалил и снова добавил ссылки, чтобы он был одинаковым для всех проектов (4.0.0.1).