2015-04-22 134 views
1

我将2个可为空的参数传递给一个Products动作。但是我被迫在mallId中传递一些值,否则我得到一个no route table matches found错误。我想在mallId中通过null并在Products行动中收到。传递两个可选参数到RedirectToRoute

return RedirectToRoute("Products", 
         new 
         { 
          mallId =(Int32?)null, 
          storeId =(Int32?)storeProducts.StoreId 
         }); 


[Route("Mall/{mallId?}/Store/{storeId?}/Products", Name = "Products")] 
public ActionResult Products(string mallId, long? storeId) 
{ 
    return View(products); 
} 

属性路由正在破解我的头,但它也很棒。

回答

2
[Route("Mall/{mallId?}/Store/{storeId?}/Products", Name = "Products")] 
public ActionResult Products(string mallId = null, long? storeId) 
{ 
    return View(products); 
} 

,不以一个值传递的mallId

2

您应该提供mallId的默认值。您分发参数的方式使得无法在路线组成中提供mallId:

[Route("Mall/{mallId=all}/Store/{storeId?}/Products", Name = "Products")] 
public ActionResult Products(string mallId = "all", long? storeId = null) 
{ 
    if(mallId == "all") 
     //do something 

    return View(products); 
} 
+0

这两个答案都适用。 Upvoted.Thanks。接受第一个 –