路由与控制器

问题描述:

的两个参数只是一个我有两个参数,一个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 
      ); 

我该怎么办? 谢谢...

+0

你是什么意思 “自动创建此网址”?另外,那些应该是'mysite.com/?a = 1'? – parKing 2013-02-19 14:25:28

+0

@parKing这意味着这个URL是通过使用默认路由自动创建的。我想从这个URL隐藏b参数。我可以那样做吗? – mortazavi 2013-02-19 15:27:04

+0

对不起,但我从来没有见过MVC“创建”一个URL。你应该可以用'mysite.com/?a = 1'命中该路线。另外,如果你不想'b',为什么这个方法呢?包括它是否会改变功能?如果是这样,你可能可以将它们分成两种方法。 – parKing 2013-02-19 15:34:48

如果你看到的“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生成的,需要考虑几个选择:

  1. 使用已命名的路线,以确保只有您想要的路线会习惯产生的URL(这往往是一个很好的做法,但它不会帮助在这种特定情况下)
  2. 指定所有的路由参数显式 - 甚至是你想要的值都是空的。这是解决这个特殊问题的一种方法。
  3. 您可以使用Razor的〜/语法或调用Url.Content(“〜/ someurl”)来确保您尝试的URL不会发生额外(或意外)处理,而不是使用路由来生成URL生成。

感谢, Eilon