Вы должны обернуть все ваши данные, которые требуются вашему представлению, в модель, специфичную для этого представления. Преимущество этого заключается в том, что вы также можете включить критерии поиска в модель, которая сначала будет пустой, но когда ваш поиск будет опубликован, модель автоматически будет содержать критерии поиска, чтобы вы могли перезагрузить их при передаче результатов назад. Это также поможет поддерживать ваше состояние между сообщениями.
Это также позволяет всем типам данных вашего представления быть безопасными, если ViewData
не будет.
Например:
public class CustomerSearchViewModel
{
public List<Customer> Customers { get; set; }
// your search criteria if you want to include it
public string SearchFirstName { get; set; }
public string SearchLastName { get; set; }
public int SearchCustomerID { get; set; }
// etc...
}
Когда вы вернете обратно List<Customer>
, критерии поиска уже будут заполнены в вашей модели из поста, поэтому ваше представление может по умолчанию вернуть критерии поиска соответствующим элементам управления (при условии, что ваши результаты поиска и элементы управления входами поиска совпадают вид).
Например, в вашем сообщении вы бы приняли CustomerSearchViewModel
. Затем все, что вам нужно сделать, это получить список клиентов, добавить его обратно в модель и вернуть ту же модель.
// assuming you have accepted a CustomerSearchViewModel named model
model.Customers = GetCustomersForSearchCriteria(model.SearchFirstName,
model.SearchLastName, model.SearchCustomerID);
return View(model);
Вы также можете добавить атрибуты проверки в свойства вашей модели, чтобы использовать встроенную проверку в MVC. Это было бы невозможно, если бы вы использовали ViewData
для передачи этих данных.
Вы должны также рассмотреть «следующего парня». Это чище, когда все данные, необходимые для представления, находятся в одном классе. Таким образом, им не нужно искать код, чтобы узнать, используется ли ViewData
и какие данные на самом деле передаются в нем.
ViewData
по-прежнему вариант для передачи данных, но я стараюсь минимизировать его использование, если это возможно.