在特定操作之外的视图上属性路由意外行为。

Attribute routing unexpected behavior on views outside specific action.

举个例子,我在一个控制器上有两个动作。 这些操作都使用属性路由。

[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") 时,我得到一个空值。

然而,当我去实际 page/view 时,Route2 通向它 returns 预期的 url。

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

为什么不输入可选参数指示器就不会显示路由?

因为 orderId 不是可选的,所以您需要将其包含在 Url

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