表格w /方法获得匹配的路线与模型参数的段

时间:2016-11-15 12:55:06

标签: asp.net-mvc asp.net-core

是否可以将带有绑定控件值的表单发送到与其URL段匹配的路由。

通常使用方法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 个答案:

答案 0 :(得分:1)

我认为您想要的是不可能的,因为网址生成发生在客户端并且根据RFC1866

  

处理其操作URL为HTTP URL且方法为的表单   GET', the user agent starts with the action URI and appends a&#39;?
  和表单数据集,在`application / x-www-form-urlencoded&#39;格式
  如上。然后,用户代理遍历到此URI的链接,就像
一样   如果它是一个锚(参见7.2,&#34;激活超链接&#34;)。

所以似乎没有办法按你的意愿发送网址。我想到的唯一方法就是使用javascript。