如何更改提交时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" />
}
}
同样的结果。
我想你应该看看@Html.BeginRouteForm方法,就像这个问题中一样。
您使用GET
请求。这意味着所有参数都将显示在url框中。我现在不能检查,但我想你可以使用这些选项:
- IIS url重写-http://www.iis.net/downloads/microsoft/url-rewrite
- 通过web.config重写Url-http://www.hanselman.com/blog/RedirectingASPNETLegacyURLsToExtensionlessWithTheIISRewriteModule.aspx
还有一批愚蠢的方法:
- 您可以将请求更改为
POST
,然后通过JS修改Url-无需重新加载页面即可修改Url - 您可以重定向请求
此外,您是否尝试为搜索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" />
}
}