2010-08-24 2 views
0

Мне нравится использовать модели для проверкиASP.NET MVC: Передача нескольких объектов в целях, включая модель проверки

<!-- 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 
} 

Как я могу упростить и лучше искать?

+0

Какую гибкость вы теряете, создавая модель представления? Почему вы считаете уродливым иметь «name =» TopicModel.Title »? –

ответ

1

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

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

+0

Это означает, что мне пришлось бы бросать объекты, которые не являются хорошим способом выполнения ASP.NET MVC. – Alex

+0

Тогда вы могли бы сделать модель своего вида подклассом вашей модели и добавить дополнительные свойства, но сохранить валидацию базового класса. –

+0

Спасибо! Не работает отлично. Очень простое решение. (Пожалуйста, обновите свой комментарий, чтобы другие люди могли видеть, как эта проблема была решена.) – Alex

1

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

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

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

+0

Что значит «сгладить модель»? – Alex

Смежные вопросы