Url.Action()包含不需要的参数,试图进行更多的控制
我在页面中有一个链接,如下所示:
Url.Action("List", "Item", new { category = "seasons" })
与该页面匹配的路由也具有parentGroup和group参数
例如:/ Seasons / Moober / Blue / 1 - > / {category} / {parentGroup} / {group} / {id}
问题是,当我在该页面上并使用Url.Action时,即使我尝试生成仅指向类别/ {category}的链接,它仍会添加所有缺少的路由值,但仍然会添加parentGroup和group。
我发现这个帖子,这表明这样做:
Url.Action("List", "Item", new { category = "seasons", group = "", parentGroup = "" })
但它不适用于我,因为它从我的url中删除它们,但将它们添加为参数:/ Seasons?parentGroup = Moober&group = Blue
我正在使用MVC3。 有没有办法强制Url.Action()只使用提供的参数或取消那些我不想要的参数?
这里是路线。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"ItemFromCategoryParentGroupSubGroup", // Route name
"{category}/{parentGroup}/{group}/{id}/{language}", // URL with parameters
new { controller = "Item", action = "Show", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory,
parentGroup = _validGroup,
group = _validChildGroup,
id = _validItemInChildGroup
}
);
routes.MapRoute(
"ItemListFromParentGroup", // Route name
"{category}/{parentGroup}/{group}/{language}", // URL with parameters
new { controller = "Item", action = "List", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory,
parentGroup = _validGroup,
group = _validChildGroup
}
);
routes.MapRoute(
"ItemWithGroup", // Route name
"{category}/{group}/{id}/{language}", // URL with parameters
new { controller = "Item", action = "Show", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory,
group = _validGroup,
id = _validItemInGroup
}
);
routes.MapRoute(
"ItemListWithGroup", // Route name
"{category}/{group}/{language}", // URL with parameters
new { controller = "Item", action = "List", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory,
group = _validGroup
}
);
routes.MapRoute(
"ItemListFromCategory", // Route name
"{category}/{language}", // URL with parameters
new { controller = "Item", action = "List", page = 1, language = ConfigurationManager.AppSettings["DefaultLanguage"] }, // Parameter defaults
new
{
category = _validCategory
}
);
编辑:
我有一个解决方案,看起来像这样:Url.RouteUrl(“ItemListFromCategory”)我基本上强制相同的路线,应该由Url.Action(“列表”,“项目”,新{类别= “seasons”})这次没有自动添加参数。
这个问题是我被迫使用命名路由。
改变你的路线
routes.MapRoute(
"SomeRoute", // Route name
"/{category}/{parentGroup}/{group}/{id}",
new {
controller = "DefaultController",
action = "DefaultAction",
parentGroup = UrlParameter.Optional
group = UrlParameter.Optional
id= UrlParameter.Optional
}
);
使parentGroup,parentGroup,组optional
。
尝试在路由注册期间将其他参数声明为UrlParameter.Optional,并在您的操作中为这些参数设置默认值。 例如。
MyAction(string category, string group = "", parentGroup = 0)
希望这可以帮助。
最后,我为每条路线建立自定义约束。
http://msdn.microsoft.com/en-us/library/system.web.routing.route.constraints.aspx
我发现它几乎可以完全控制我们想要对我们的路线做什么。
链接地址: http://www.djcxy.com/p/8805.html上一篇: Url.Action() includes unwanted parameters, trying to have more control