我对使用 MVC 模式比较陌生,这是我的第一个 SO 问题;我专门使用 ASP.NET MVC 3,但我的问题可能适用于一般的 MVC 模式。重用本质上返回相同视图但可能从数据库查询不同结果集的控制器方法的最佳方法是什么?例如,我可能想展示所有客户,或者特定区域的一些客户,或者一些具有“精英”身份的客户。
我目前对每个“GetBy...”结果集都有单独的控制器方法。有没有办法使用“列表”控制器并用不同的结果集填充它?也许通过将结果集作为参数注入?
我对使用 MVC 模式比较陌生,这是我的第一个 SO 问题;我专门使用 ASP.NET MVC 3,但我的问题可能适用于一般的 MVC 模式。重用本质上返回相同视图但可能从数据库查询不同结果集的控制器方法的最佳方法是什么?例如,我可能想展示所有客户,或者特定区域的一些客户,或者一些具有“精英”身份的客户。
我目前对每个“GetBy...”结果集都有单独的控制器方法。有没有办法使用“列表”控制器并用不同的结果集填充它?也许通过将结果集作为参数注入?
将这些方法保存在服务层中,并根据输入要求调用它。检查传递给操作方法的参数。
public ActionResult List(string regionName,string status)
{
List<Customer> customerList=new List<Customer>();
if((!String.IsNullOrEmpty(regionName)) && (!String.IsNullOrEmpty(status)))
{
customerList=CustomerService.GetCustomersForRegionStatus(regionName,status);
//List all Customers
}
else if(!String.IsNullOrEmpty(regionName))
{
customerList=CustomerService.GetCustomersForRegion(regionName);
}
else if(!String.IsNullOrEmpty(status))
{
customerList=CustomerService.GetCustomersForStatus(status);
}
else
{
customerList=CustomerService.GetAllCustomers();
}
return View(customerList);
}
您的视图将绑定到 Customer 对象的集合
@model IList<Customer>
@foreach(var cust in Model)
{
<p>@cust.Name</p>
}
假设GetCustomersForRegionStatus
,GetCustomersForRegion
和GetAllCustomers
方法返回一个客户对象列表,并在内部调用不同的数据库访问方法,以根据传递的参数获取过滤后的数据。
这些用于 urls 的请求现在会给出不同的结果。
yourcontrollername/list
yourcontrollername/list?regionName=someregion
yourcontrollername/list?status=elite
yourcontrollername/list?regionName=someregion&status=elite