路由没有查询字符串

时间:2017-01-28 17:48:41

标签: c# asp.net-mvc routing

我在默认路线

之前添加了以下路线
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?

由于

与发布的副本不同,标记的答案无法解决我的问题,根据评论,它也不适用于其他人。

3 个答案:

答案 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}}