2016-08-05 46 views
1

作为一个例子,我在一个控制器上有两个动作。 这两个操作都使用属性路由。在特定操作之外的视图上传递意外行为的属性。

[Route("proofCampaign/{campaignId?}", Name ="Route1")] 
public ActionResult ProofCampaign(int campaignId){ 
      //Do stuff 
      return View{campaignVM} 
      } 
[Route("proofOrder/{orderId}", Name ="Route2")] 
public ActionResult ProofOrder(int orderId){ 
      //Do stuff 
      return View{orderVM} 
      } 

当我在任意视图@Url.RouteUrl("Route1")我得到了正确的URL,但是当我尝试在任何视图中使用@Url.RouteUrl("Route2")我得到一个空。

但是,当我去实际的页面/视图,Route2导致它返回预期的网址。

上面代码的区别是“?”在路线中,即使该参数不是可选的。 最终,我想在其他视图上显示第二个链接作为菜单的一部分。

为什么没有放入可选的参数指示符,路由不会显示?

+0

因为'orderId'不是可有可无的,你需要把它列入该网址'@ Url.RouteUrl(“Route2到”新{ orderId = xxx)' – Nkosi

+0

把它放在一个答案,所以我可以相信你。 –

+0

很高兴帮助。按要求完成。快乐编码! – Nkosi

回答

0

因为orderId不是可有可无的,你需要把它列入该网址

@Url.RouteUrl("Route2", new { orderId = xxx })