2016-11-15 33 views
1

是否有可能將綁定控件值的表單發送到與其網段匹配的路線。形式w /方法獲取模型參數段的匹配路線

通常情況下,當使用方法GET進行傳輸時,表單將發送到'Form?Category = cat24 & Search = sea11'。是否可以發送表單到'Form/cat24/sea11'。

配置的ASP.NET MVC路線允許這兩種方式。

示例代碼:

形式:

<form asp-action="Index" method="get"> 
    category <input asp-for="Category" /><br /> 
    search <input asp-for="Search" /><br /> 
    <button type="submit">send</button> 
</form> 

控制器:

public class FormController : Controller 
{ 

    [HttpGet] 
    public IActionResult Index(SearchViewModel model) 
    { 
     var elem1 = model?.Search; 
     var elem2 = model?.Category; 
     if (elem1 != null) 
      model.Results.Add(elem1); 
     if (elem2 != null) 
      model.Results.Add(elem2); 
     // Do Search 

     return View(model); 
    } 
} 

模型:

public class SearchViewModel 
{ 
    public string Search { get; set; } 
    public string Category { get; set; } 

    public IList<object> Results { get; set; } = new List<object>(); 
} 

路線配置:

routes.MapRoute(
    name: "form", 
    template: "Form/{category?}/{search?}", 
    defaults: new { controller = "Form", action = "Index" }); 
+1

瀏覽器對服務器上的路由定義一無所知。唯一的辦法是用戶JavaScript攔截提交併生成自己的網址 - 參考[這個答案](http://stackoverflow.com/questions/25886562/how-to-define-html-beginform-for-action-with - 屬性路由/ 40560391#40560391) –

回答

1

我想是因爲URL生成發生在客戶端,並根據RFC1866你想要什麼是不可能的:

要處理,其動作URL是一個HTTP URL形式,其方法是 GET', the user agent starts with the action URI and appends a
以及形式數據集,以'application/x-www-form-urlencoded'格式
如上。如果用戶代理是錨點(參見7.2,「激活超鏈接」),則該用戶代理會遍歷到此URI的鏈接,如

所以它似乎沒有辦法發送網址,只要你想。我唯一想到的就是使用javascript。

+0

謝謝,RFC參考的詳盡答案 - 接受 – Marius