ASP.NET MVC: передача нескольких объектов в представление, включая модель проверки - PullRequest
0 голосов
/ 24 августа 2010

Мне нравится использовать Модели для проверки

<!-- ViewPage -->

<%@ Page Language="C#" Inherits="ViewPage<TopicModel>" %>

...

<%= Html.TextBoxFor(m => m.Title) %>

...

<%= Html.TextBoxFor(m => m.Description) %>


// Controller

[HttpPost]
public ActionResult NewTopic(TopicModel model)
{
     // validate
}

Это прекрасно работает, но когда мне нужно передать дополнительные данные, мне нужно создать новый класс ViewModel и я теряю гибкость.

<!-- ViewPage -->

<%@ Page Language="C#" Inherits="ViewPage<TopicViewModel>" %>

<%= Model.SomethingImportant %>

...

<%= Html.TextBoxFor(m => m.TopicModel.Title) %> // UGLY, I get name="TopicViewModel.TopicModel.Title"

...

<%= Html.TextBoxFor(m => m.TopicModel.Description) %> // UGLY, same thing


// Controller

[HttpPost]
public ActionResult NewTopic(TopicViewModel model)
{
     // validate
     var validationModel = model.TopicModel; // UGLY
}

Как мне сделать его проще и лучше выглядеть?

Ответы [ 2 ]

1 голос
/ 24 августа 2010

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

Идея модели состоит в том, что она содержит «материал», необходимый представлению при рендеринге- так что это идеальное место для размещения всех элементов данных, которые нужны представлению.

Если вы действительно оскорблены соглашением об именах (которое используется платформой для повторного заполнения вашей модели из публикации формы)Вы могли бы сгладить модель.Это дало бы вам «красивые» названия для каждого предмета, но было бы много работы без причины.

1 голос
/ 24 августа 2010

Рассматривали ли вы использование словаря ViewData для дополнительных данных вне модели?

Обновление В качестве альтернативы, сделайте модель представления подклассом вашей модели и добавьте дополнительные свойства, носохранить проверку базового класса.

...