Вопрос по asp.net-mvc-3, asp.net-mvc, razor – Атрибут данных ASP.Net [HiddenInput] не работает при визуализации с помощью Html.EditorForModel в Razor?

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.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] приписать эти свойства? Есть идеи?

Это должно работать. Я не могу воспроизвести проблему. Darin Dimitrov
у меня точно такая же проблема Aleksei Chepovoi

Ваш Ответ

5   ответов
1

Если вы используете скаффолдинг, генератор установит входной тег с типом, скрытым в вашем представлении. Это зависит от шаблона T4.

Если вы создаете вид вручную, вы должны установить поле вручную. например

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

У меня была похожая проблема, в моем случае проблема была вызвана ссылкой System.Web.Mvc.

Я создавал приложение MVC 3, но вместо добавления версии 3 System.Web.Mvc я добавил версию 4.

Большое спасибо, у меня была проблема для MVC4 и MVC5
2

В моем случае причиной этой проблемы было то, что сборка, содержащая класс модели и основной проект веб-приложения, имела ссылки на разные версии сборки System.Web.Mvc.

Если у вас есть пара проектов, ссылающихся на сборку System.Web.Mvc - убедитесь, что используемая версия одинакова во всех проектах.

2

У меня такая же проблема.

Оказалось, у меня была версия 5.2.2.0 System.Web.Mvc в проекте, который содержал модель и 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 просто загрузит и установит последнюю версию.

После того, как я это сделал, мне также нужно было обновить мой проект модульного тестирования, чтобы он соответствовал версии проекта веб-приложения. Возможно, вам придется сделать то же самое.

9

И в моем случае мне пришлось написать[HiddenInput]как[HiddenInput(DisplayValue=false)]

Начиная с MVC 5, это также работало для меня.
Это работает для меня!

Похожие вопросы