0
我想知道如何保持一个在ASP.NET MVC-4UrlRedirect
:奇怪的重定向行为
例如,我有这样的:
/admin/category/add/81/142
但我使用后:
return RedirectToAction("Add", "Category", new RouteValueDictionary
{
{"id", siteid.Value},
{"cid", pid.HasValue ? pid.Value : cid.Value }
});
我得到这个:
/admin/category/add?id=81&cid=142
但我想原来的/admin/category/add/81/142
这里是我的路由配置:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRouteLowercase(
"Admin_LogOn",
"Admin/{controller}/{action}/",
defaults: new { controller = "Account", action = "LogOn" },
constraints: null
);
context.MapRouteLowercase(
"Admin_Category_List_Add",
"Admin/{controller}/{action}/{id}/{cid}/{pid}",
defaults:
new
{
controller = "Category",
action = "Create",
id = UrlParameter.Optional,
cid = UrlParameter.Optional,
pid = UrlParameter.Optional
},
constraints: null
);
context.MapRouteLowercase(
"Admin_TwoParameters",
"Admin/{controller}/{action}/{id}/{cid}",
defaults: new { controller = "Manager", action = "Index", id = UrlParameter.Optional, cid = UrlParameter.Optional },
constraints: null
);
context.MapRouteLowercase(
"Admin_default",
"Admin/{controller}/{action}/{id}",
defaults: new { controller = "Manager", action = "Index", id = UrlParameter.Optional },
constraints: null
);
}
请告诉我,我可以做更多的一般行为,喜欢实现自定义路由还是什么? – IamStalker 2013-04-08 09:42:26
不使用自定义路由,您可以使用它将您想要的url格式映射到正确的控制器和方法。 Url.Action已经是一种“普遍行为”,并且已经将'routevalues'传递给它。只有它真的会给你的键值对(例如ID = 81)。但是,与我的建议解决方案相比,这是最安全的 - 对于您的问题,这是一个相当好的答案。另一种方法 - 除了Url.Action提供的内容之外,您可以将(动态)对象传递给将为您构建字符串的方法。 – 2013-04-08 09:55:33
感谢您的建议,您的解决方案很好地工作。 – IamStalker 2013-04-08 12:03:31