C# 对控制器在这种情况下如何映射到视图感到困惑

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

我想为我的用户提供以下两个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", 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()
{
}