我有一个带有两个参数的actionresult:
public ActionResult Index(int a,string b)
{
//some code
return View(b);
}
它会自动创建此网址:
mysite.com/a=1&b=http://site.com/b=1
我只需要在我的网址中显示第一个参数“a”:
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
);
我该怎么办? 感谢...
答案 0 :(得分:0)
如果你看到" b"参数从当前请求中渗透,您可以设置" b"参数显式为空字符串以避免此行为:
@Html.ActionLink("Home", "Index", "Home", new { a = 1, b = "" }, null)
我reported这个"功能"作为一个错误,但微软的开发人员似乎认为这种行为应该使您的网址更容易配置,并且他们不打算修复它。
您在此处看到的是路由功能,其中" ambient"值(即在传入请求的URL中检测到的值)用于简化(有时......)生成到其他页面的路由。
您可以在此StackOverflow帖子中查看我的答案(名称为" Eilon"),其中我将更详细地解释行为: How Can I Stop ASP.Net MVC Html.ActionLink From Using Existing Route Values?
最终,如果您希望最大限度地控制为URL生成的内容,可以考虑以下几个选项:
- 使用命名路由确保只使用您想要的路由来生成URL(这通常是一种很好的做法,尽管它在这种特定情况下无法提供帮助)
- 明确指定所有路径参数 - 甚至是您想要为空的值。这是解决这一特定问题的一种方法。
- 您可以使用Razor的语法或调用Url.Content("〜/ someurl")而不是使用路由来生成网址,以确保不会发生额外(或意外)处理将发生在您尝试生成的网址上。
醇>谢谢, Eilon