我需要的路由很简单,我必须在那里丢失一些东西。作为代码示例,我提出了更简单的情况,可以重现我的行为。asp.net MVC中的入站/出站url路由
你有这样的ActionMethod:
public ActionResult Index(string provider)
{
ViewData["Message"] = provider;
return View("Index");
}
而且你有这样的路线:
routes.MapRoute(
null,
"{controller}/{action}/{provider}",
new { controller = "Home", action = "Index", provider = "Default" }
); // Parameter defaults
您可以拨打/首页/索引/自定义和供应商将采取值 “自定义”
如果我想要url /?provider = Custom将供应商映射到t他参数。 我认为这样做会工作,因为将使用默认控制器和默认操作,并且将使用来自查询字符串的提供程序而不是默认操作程序。 但查询字符串在这里被忽略。
这是我的情况中的一个问题,因为我有一个使用HTTP GET方法的表单。 表单动作必须是Html.BeginForm(c => c.Index(null)),它被解析为/并且我的表单的值被添加到查询字符串中。 (供应商是形式下拉)
因此,通过形式是/?ABC =值& CDE =值内置网址...
UPDATE
接受的答案如下(见注释)使我这个解决方案:
,并声明的形式,像这样:
Html.BeginRouteForm("Search", FormMethod.Get){
...
}
这样,表单将与QueryString中的提供者一起工作(当我使用指定的路径搜索时),但在其他情况下,我将使用默认路由。 :)
是的你是对的,那是有效的,除了我真的需要一个默认值...我不想在每个使用它的动作中将回退代码编写到默认提供程序。 – 2010-06-07 15:58:48
如果提供者被设置在URL中,为什么它需要成为表单集合的一部分?意思是,如果我访问site.com/home/about/customProvider并且表单从这里执行GET操作,则GET URL将为site.com/home/about/customProvider?form1=a&form2=b ...您会仍然有你的提供者正确? – Tommy 2010-06-07 16:07:30
这是一个搜索页面,您可以在表单中设置的不同提供商中搜索。但是我也需要从另一个页面链接到正确的提供者的搜索。 – 2010-06-07 16:15:16