如何更改提交时Url的格式

本文关键字:格式 Url 何更改 提交 | 更新日期: 2023-09-27 18:26:45

我在Razor模板中有一个搜索框:

    @{
        using (Html.BeginForm("Detail", "Book", FormMethod.Get))
        {
        @Html.TextBox("Id")
        <input type="submit" value="Search" />
        }
    }

当我提交搜索时,它会转到一个url,比如:

~/书籍/细节?Id=1234

然而,我希望它像这样格式化url,只是因为我认为它看起来更干净:

~/书籍/详细信息/1234

它工作得很好,因为控制器方法签名看起来像这样:

    // GET: /Book/Detail/id
    public ActionResult Detail(string id)

带有TextBoxFor的模型

我试过Html.TextBoxFor:

    @model WebApplication.Models.SearchModel
    @{
        using (Html.BeginForm("Detail", "Book", FormMethod.Get))
        {
        @Html.TextBoxFor(m => m.Id)
        <input type="submit" value="Search" />
        }
    }

同样的结果。

如何更改提交时Url的格式

我想你应该看看@Html.BeginRouteForm方法,就像这个问题中一样。

您使用GET请求。这意味着所有参数都将显示在url框中。我现在不能检查,但我想你可以使用这些选项:

  1. IIS url重写-http://www.iis.net/downloads/microsoft/url-rewrite
  2. 通过web.config重写Url-http://www.hanselman.com/blog/RedirectingASPNETLegacyURLsToExtensionlessWithTheIISRewriteModule.aspx

还有一批愚蠢的方法:

  1. 您可以将请求更改为POST,然后通过JS修改Url-无需重新加载页面即可修改Url
  2. 您可以重定向请求

此外,您是否尝试为搜索url添加个人路由?

尝试为表单submit使用模型,并使用@Html.TextBoxFor.

答案是添加一个新的搜索操作,然后重定向到详细信息。这很好,因为我可以选择在搜索时执行更多操作,例如如果查询有多个匹配项,则返回不同的视图。

    //
    // GET: /Book/Search?query=
    public ActionResult Search(string query)
    {
        return RedirectToAction("Detail", new { id = query });
    }
    //
    // GET: /Book/Detail/id
    public ActionResult Detail(string id)

剃刀:

@{
    using (Html.BeginForm("Search", "Book", FormMethod.Get))
    {
        @Html.TextBox("query")
        <input type="submit" value="Search" />
    }
}