如何将参数添加到mvcSiteMapNode?

时间:2017-02-13 13:20:09

标签: asp.net-mvc mvcsitemapprovider asp.net-mvc-sitemap

我在控制器中有一个动作:

    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 }
        );
    }

1 个答案:

答案 0 :(得分: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中)。