我在默认路线
之前添加了以下路线routes.MapRoute(
name: "RecordDefault",
url: "{controller}/{action}/{name}",
defaults: new { controller = "Person", action = "Record" }
);
我可以点击我想要的页面:sitename / Person / Record / John
但我在导航中使用以下代码进行全局搜索
@using (Html.BeginForm("Record", "Person", FormMethod.Get, new { @class = "navbar-form navbar-left" }))
{
@Html.TextBox("name", "", new { @class = "form-control", placeholder = "Search Name" })
}
当我提交表单时,会显示以下URL:sitename / Person / Record?name = John
我需要做些什么来确保在没有查询字符串参数的情况下格式化URL?
由于
与发布的副本不同,标记的答案无法解决我的问题,根据评论,它也不适用于其他人。
答案 0 :(得分:1)
使用表单帖子FormMethod.Post
代替Get。所以这个值不会出现在查询字符串中。
@using (Html.BeginForm("Record", "Person", FormMethod.Post, new { @class = "navbar-form navbar-left" }))
{
@Html.TextBox("name", "", new { @class = "form-control", placeholder = "Search Name" })
}
答案 1 :(得分:1)
您的表单会生成../Person/Record?name=John
,因为浏览器不知道您的路由(这是您服务器上运行的c#代码)。 HTML标准要求在方法为GET时将成功表单控件的值添加为查询字符串值。
为了生成您首选的网址(../Person/Record/John
),您需要javascript来拦截并取消默认提交,并构建一个网址以导航到。使用jQuery:
$('form').submit(function() {
var baseUrl = $(this).attr('action');
// or var baseUrl = '@Url.Action("Record", "Person")';
var url = baseUrl + '/' + $('#name').val();
location.href = url; // redirect
return false; // cancel the default submit
});
答案 2 :(得分:-1)
在您的Controller中添加以下内容 -
@using (Html.BeginForm("Record", "Person", FormMethod.Post))
{
@Html.TextBox("name")
<input type="submit" />
}
在您的视图中添加以下代码替换现有代码并检查 -
{{1}}