C# 对控制器在这种情况下如何映射到视图感到困惑
我想为我的用户提供以下两个URL:C# 对控制器在这种情况下如何映射到视图感到困惑,c#,asp.net-mvc-3,actionmethod,C#,Asp.net Mvc 3,Actionmethod,我想为我的用户提供以下两个URL: /Account/Orders <- This would should be a grid of all orders. /Account/Orders/132 <- This would show this particular order information. /Account/Orders您可以有两种不同的视图。一个用于网格,一个用于订单详细信息 然后你可以这样称呼他们: return View("OrderGrid", Or
/Account/Orders <- This would should be a grid of all orders.
/Account/Orders/132 <- This would show this particular order information.
/Account/Orders您可以有两种不同的视图。一个用于网格,一个用于订单详细信息
然后你可以这样称呼他们:
return View("OrderGrid", Orders); // for grid
return View("OrderDetail", Order); // for detail
假设您使用的是默认路由,则永远不会调用第二个Order
方法。如果未提供空值,路由将用空值填充缺少的id
参数,并尝试使用id
参数调用重载
您可以更改路线或做其他事情来尝试绕过此问题,但更快的选择是只在路线系统中工作:
public ActionResult Orders(int id = -1)
{
return id == -1 ? this.OrdersSummary() : this.OrdersDetail(id);
}
private ActionResult OrdersSummary()
{
var model = new SummaryModel();
// fill in model;
return this.View("OrdersSummary", model);
}
private ActionResult OrdersDetail(int id)
{
var model = new DetailModel();
// fill in model;
return this.View("OrderDetail", model);
}
有两种选择:
1) 首先用最具体的路线设置路线
MapRoute("first", "/Accounts/Orders/{id}" ....
controller="mycontroller" action="details"
MapRoute("second", "/Accounts/Orders .....
controller="mycontroller" action="summary"
2) 使用两个具有不同签名的get方法代替路由:
public ActionResult Index()
{
}
[行动名称(“索引”)]
公共行动结果索引详细信息(int id)
{
}
路由应该与匹配。在到达该代码区域之前,我得到一个错误,它表示只有一个可选参数必须为null。这意味着当访问账户/订单时
我使用了错误的操作方法。你也可以使用一个可为空的int(int?id)并检查id.HasValue,而不是强制使用-1。使用编辑(或列表)方法和索引方法在“标准”MVC realmMan中更有效一点昨晚我累了吗。。。路由设置显然是解决此问题的方法。谢谢你让我重新开动脑筋。:)
public ActionResult Index()
{
}