我在控制器中有一个动作:
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? p>
这是我的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 :(得分:0)
如果您想使用默认路由,则必须使用id
作为路由密钥(因为它仅支持密钥controller
,action
和id
) 。如果不这样做,您将获得一个带有查询字符串?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中)。