2017-02-13 164 views
0

我在控制器的動作:如何將參數添加到mvcSiteMapNode?

public ActionResult Close(DocType docType) 
    { 
     return View(); 
    } 

其中的DocType是一個簡單的枚舉。 我想有2個不同的鏈接到相同的動作,但具有不同的參數。我曾經嘗試這樣做:

<mvcSiteMapNode title="Accounting" clickable="false" imageUrl="~/Content/Images/Buttons/MenuButtons/billing.png" visibility="path"> 
     <mvcSiteMapNode title="Payments" controller="Payment" action="Index"></mvcSiteMapNode> 
     <mvcSiteMapNode title="Closing WO" controller="Payment" action="Close" docType="2"></mvcSiteMapNode> 
     <mvcSiteMapNode title="Closing WS" controller="Payment" action="Close" docType="4"></mvcSiteMapNode> 
    </mvcSiteMapNode> 

但在菜單我有2個鏈接不帶任何參數:「/支付/關閉」

有什麼不對? 如何將參數添加到mvcSiteMapNode中?

這裏是我的RouteConfig:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
+0

這聽起來像一個路由問題。請顯示您的路由配置。你是否有一個帶有{docType}參數的路由? – NightOwl888

+0

不,我沒有這樣的路線。我想只使用帶可選id參數的默認路由 –

回答

0

如果你想用你的默認路由,你必須使用id爲路由鍵(因爲它只支持鍵controlleractionid)。如果你不這樣做,你將得到一條查詢字符串爲?docType=2的路由,因爲這是不屬於路由的額外未定義信息。

<mvcSiteMapNode title="Accounting" clickable="false" imageUrl="~/Content/Images/Buttons/MenuButtons/billing.png" visibility="path"> 
    <mvcSiteMapNode title="Payments" controller="Payment" action="Index"></mvcSiteMapNode> 
    <mvcSiteMapNode title="Closing WO" controller="Payment" action="Close" id="2"></mvcSiteMapNode> 
    <mvcSiteMapNode title="Closing WS" controller="Payment" action="Close" id="4"></mvcSiteMapNode> 
</mvcSiteMapNode> 

public ActionResult Close(DocType id) 
{ 
    return View(); 
} 

否則,你需要有關鍵{docType}的路線。無論哪種方式,鍵名必須匹配才能正確生成URL(因爲在使用ActionLink時需要在MVC中)。