如何使用Asp MVC自定义表单的URL?

时间:2011-01-14 20:31:29

标签: asp.net-mvc-3

我正在为Asp Mvc添加一个搜索框。

这是表单的html:

@using (Html.BeginForm("Query", "Search", FormMethod.Get))
{
    <input type="text" name="q" />
    <input type="submit" value="Seach" />
}

我添加了这条路线

routes.MapRoute("Search", "q={query}", 
    new { controller = "Search", action = "Query" });

我希望该表单生成一个类似于http://localhost:####/q=value in textbox的网址。

是否有可能改变MVC生成网址的方式?这是我现在得到的:

http://localhost:50916/Search/Query?q=value in textbox

2 个答案:

答案 0 :(得分:1)

根据RFC 3986=符号是用于分隔参数和参数值的保留字符,您不应在URI的这一部分使用它。您最接近的是http://localhost:####/?q=value

事实上,您可以使用这样的路由作为传入的URL,ASP.NET MVC将正确解析它并调度到正确的控制器操作。问题出在<form>标记上。有两种可能的动词:GET和POST。如果您使用在表单中输入的POST参数将在请求正文中发送而不会显示在URL中。如果您根据规范使用GET,则用户代理将通过在追加?后将输入字段的键/值对附加到表单的操作来发送请求。

因此,除非您使用一些可处理表单onsubmit事件的javascript,取消默认提交并将window.location更改为所需格式,否则无法达到预期效果。问题是:你真的需要走那么远吗?

答案 1 :(得分:1)

如果您需要对目标网址进行更具体的控制,则可以使用标准HTML表单标记而不是HTML帮助程序。