我有一个简单的表格和高级搜索表单。我通过List<Customers>
到模型:使用ASP.NET MVC将数据传递给一个简单的网格表单
View(List<Customers>);
那么什么是传递和返回数据的搜索表单最好的方法?我想使用验证或某事,但我认为通过ViewData
传递数据不是个好主意。有什么建议么?
我有一个简单的表格和高级搜索表单。我通过List<Customers>
到模型:使用ASP.NET MVC将数据传递给一个简单的网格表单
View(List<Customers>);
那么什么是传递和返回数据的搜索表单最好的方法?我想使用验证或某事,但我认为通过ViewData
传递数据不是个好主意。有什么建议么?
您应该将您所需的所有数据包含在特定于该视图的模型中。这样做的好处是,您还可以在模型中包含您的搜索条件,一开始这些条件将为空,但是当您发布搜索时,模型会自动包含您的搜索条件,以便在传回结果时可以重新加载它。这将有助于保持你的状态在帖子之间。
这也允许您的所有视图的数据类型安全,其中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
仍然是传递数据的一个选项,但我尽量尽量减少它的使用。
不是只传递一个项目列表到您的视图,而是创建一个包含项目列表和任何其他可能需要的数据的类,即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);