Мой код контроллера действий выглядит любительским - PullRequest
0 голосов
/ 19 мая 2009

Первый раз,

Я играл с MVC abit ... У меня есть представление с несколькими полями ввода, некоторые из этих полей могут быть пустыми в сообщении.

Метод действия внутри контроллера для поста выглядит примерно так

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)

Я использовал расширение DynamicQuery, которое использовалось для выполнения динамических запросов Linq в моей базе данных, и я инкапсулировал это в объект поиска, который передается на уровень доступа к данным для исполнения.

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

Все это выглядит немного неприятно в коде, поскольку мне приходится устанавливать как свойства объекта поиска, так и ViewDatas.

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)  { 
var search = new Search { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember 
}; 

var memberViewData = new MemberViewData { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember
}; 

memberViewData.Results = _dataRepository.GetMember(search); 

return View("Search", memberViewData); 

}

Я слишком обдумал это и действительно должен просто передать значения в слой доступа к данным и заполнить ViewData в контроллере, или я мог бы использовать гораздо более элегантный шаблон или практику?

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

Ответы [ 3 ]

2 голосов
/ 19 мая 2009

Использование связывателя моделей для привязки данных

1 голос
/ 19 мая 2009

Согласно вашему фрагменту класс MemberViewData имеет свойство Results в дополнение к свойствам класса Search. Поэтому первым шагом было бы сделать MemberViewData производным от Search и определить конструктор, который принимает экземпляр Search в качестве параметра и присваивает ему его основные свойства. Далее я бы изменил метод действия следующим образом:

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}
0 голосов
/ 19 мая 2009

Как уже упоминал Тадеуш, ModelBinder может помочь вам создать MemberViewData, который оставит только те результаты, которые нужно получить.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...