Передача и получение данных в простой форме сетки с использованием ASP.NET MVC - PullRequest
0 голосов
/ 18 августа 2010

У меня есть страница с простой таблицей и расширенной формой поиска. Я передаю List<Customers> модели:

View(List<Customers>);

Так, как лучше всего передавать и возвращать данные в форму поиска? Я хочу использовать проверку или что-то еще, но я думаю, что передача данных через ViewData не очень хорошая идея. Есть предложения?

Ответы [ 2 ]

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

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

Это также позволяет всем типам данных вашего представления быть безопасными, если 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 по-прежнему вариант для передачи данных, но я стараюсь минимизировать его использование, если это возможно.

0 голосов
/ 18 августа 2010

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

public class CustomerSearchViewModel {
    public IEnumerable<Customer> Customers { get; set; }
    public string SearchTerm { get; set; }
}

.....

var viewModel = new CustomerSearchViewModel { 
                  Customers = customerList,
                  SearchTerm = searchTerm
                };

return View(viewModel);
...