@HTML.editorForModel() не создает интерфейс редактирования для модели

У меня есть модель: Меню является подклассом menuComponent

и компонент меню имеет два свойства: Имя и Описание оба являются строковыми

Я создал Edit View и попытался создать поля редактирования с помощью editorForModel(). но он не создает никаких полей для редактирования.

@using (Html.BeginForm())
{ 
    @Html.EditorForModel();
    <input type="submit" value="Save" /> 
    @Html.ActionLink("Cancel and return to List", "Index") 
}

Я должен использовать @HTML.EditorFor() для создания полей редактирования

 @using (Html.BeginForm())
    { 
        @Html.EditorFor(m => m.Name);
        @Html.EditorFor(m => m.Description);
        <input type="submit" value="Save" /> 
        @Html.ActionLink("Cancel and return to List", "Index") 
    }

почему это случилось?

1 ответ

Решение

Об этой проблеме я сообщил Microsoft: http://connect.microsoft.com/VisualStudio/feedback/details/636341/modelmetadata-fromlambdaexpression-has-changed-in-asp-net-mvc-3-rtm

В основном шаблоны "Редактор" и "Отображение" ищут свойства только в соответствии с текущим типом модели, а не в родительских классах.

Их официальный ответ таков:

Привет Дарин (и другие),

Это было преднамеренное изменение, которое мы представили в ASP.NET MVC 3, которое было результатом компромисса между лучшей поддержкой унаследованных моделей или лучшей поддержкой моделей, реализующих интерфейсы. В итоге мы предпочли унаследованные модели, что, по нашему опыту, является более распространенным подходом.

Основная проблема заключается в том, что когда интерфейс реализуется классом, этот класс на самом деле не наследует ни одного из членов интерфейса. Ключевым моментом здесь является то, что поскольку он не наследует членов интерфейса, он также не наследует метаданные этих членов.

Спасибо, команда ASP.NET

Так что в основном они не считают это ошибкой, но это сделано специально.

Другие вопросы по тегам