属性路由错误MVC 5

时间:2014-09-04 00:48:42

标签: asp.net asp.net-mvc asp.net-mvc-5 asp.net-mvc-routing

我正在尝试使用多个可选参数来路由操作,但它无法正常工作。我正在分享我的代码,请指导我。

[HandleError]
[RouteArea("Admin", AreaPrefix = "sp-admin")]
[RoutePrefix("abc-system")]
[Route("{action}")]
public class AbcController : Controller
{
   [Route("list/{id:int?}/{PersonID?}/{ref?}")]
   public async Task<ActionResult> Index(int? id, int? PersonID, string @ref)
   {
      return view();
   }
}

这不会像这样工作 http://anylocallink.com/sp-admin/abc-system/list/2/details 但是像这样工作 http://anylocallink.com/sp-admin/abc-system/list/2/3/details

如果链接包含任何可选参数,我希望它能够正常工作。 请指导我

2 个答案:

答案 0 :(得分:0)

这不会起作用,因为该路线不知道放置int参数的位置。你可以做这样的事情

[Route("list/{type}/{id}/{ref?}")]
public async Task<ActionResult> Index(string type, int id, string @ref)
{ 
    if(type == "Person"){ ... }
    else { ... }

   return View();
}

然后你可以为路线

这样做
list/Person/1/Details
list/ID/2/Details

答案 1 :(得分:0)

您可以指定&#39; alpha&#39;作为@ref动作参数的约束,并有两个如下的动作:

[Route("list/{id:int?}/{ref:alpha?}")]
public async Task<ActionResult> Index(int? id, string @ref)
{
  return await Index(id, null, @ref);
}

[Route("list/{id:int?}/{personId:int?}/{ref:alpha?}")]
public async Task<ActionResult> Index(int? id, int? personId, string @ref)
{
  return View();
}

这适用于两种方案。我更喜欢这个,因为我不需要 一次又一次地修改我的路线。