路由与控制器
问题描述:
的两个参数只是一个我有两个参数,一个ActionResult:路由与控制器
public ActionResult Index(int a,string b)
{
//some code
return View(b);
}
它会自动创建这个网址:
mysite.com/a=1&b=http://site.com/b=1
我只需要显示的第一个参数“一”在我的网址:
mysite.com/a=1
我使用在global.ascx中创建的MVC的默认路由:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
我该怎么办? 谢谢...
答
如果你看到的“B”参数当前请求流血通过,你可以明确地设置“B”参数空字符串,以避免此行为:
@Html.ActionLink("Home", "Index", "Home", new { a = 1, b = "" }, null)
我reported这个“功能”是一个错误,但微软的开发人员似乎认为这种行为会让你的URL更容易配置,而且他们不打算修复它。
你在这里看到的是一个路由功能,其中使用“环境”值(即传入请求的URL中检测到的值)来简化(有时候...)生成到其他路由的路由页面。
你可以在这个*的帖子,在那里我更详细一点解释行为检查我们我的回答(名称为“Eilon”下): How Can I Stop ASP.Net MVC Html.ActionLink From Using Existing Route Values?
最后,如果你想在什么得到最大程度的控制对于URL生成的,需要考虑几个选择:
- 使用已命名的路线,以确保只有您想要的路线会习惯产生的URL(这往往是一个很好的做法,但它不会帮助在这种特定情况下)
- 指定所有的路由参数显式 - 甚至是你想要的值都是空的。这是解决这个特殊问题的一种方法。
- 您可以使用Razor的〜/语法或调用Url.Content(“〜/ someurl”)来确保您尝试的URL不会发生额外(或意外)处理,而不是使用路由来生成URL生成。
感谢, Eilon
你是什么意思 “自动创建此网址”?另外,那些应该是'mysite.com/?a = 1'? – parKing 2013-02-19 14:25:28
@parKing这意味着这个URL是通过使用默认路由自动创建的。我想从这个URL隐藏b参数。我可以那样做吗? – mortazavi 2013-02-19 15:27:04
对不起,但我从来没有见过MVC“创建”一个URL。你应该可以用'mysite.com/?a = 1'命中该路线。另外,如果你不想'b',为什么这个方法呢?包括它是否会改变功能?如果是这样,你可能可以将它们分成两种方法。 – parKing 2013-02-19 15:34:48