我需要的路由很簡單,我必須在那裏丟失一些東西。作爲代碼示例,我提出了更簡單的情況,可以重現我的行爲。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