我有一个非常简单的形式:
<% Html.BeginForm("Listing", "Home", Nothing, FormMethod.Get) %>
<%= Html.TextBox("id")%>
<%= Html.TextBox("id2")%>
<input type="submit" value="Submit" />
<% Html.EndForm()%>
这将生成一个包含两个输入字段的表单。如果我输入'test1'和'test2'作为文本并提交表单,最终结果将是:
http:// localhost/Home/Listing?id=test1&id2=test2
有没有办法配置MVC2框架,以便最终结果如下:
http://localhost/Home/Listing/test1/test2
当然,替代方案是编写一个小的Javascript来拦截表单提交,构建URL并在客户端重定向用户,或者改为执行POST,构造URL然后在服务器上重定向用户侧。
答案 0 :(得分:3)
就个人而言,我会在这里关注PRG pattern。
用户填写您的表单,然后将POST
编辑回服务器,您对所需数据执行任何操作,然后通过GET
将用户重定向到适当的位置(重定向)行动,路线等)。
这对您有几个好处。第一个也是最明显的是,用户现在可以刷新他们的目标页面等而没有可怕的“刷新此页面将bla bla发回服务器”消息。
您的第二个好处是,您现在可以将用户重定向到您喜欢的网址。在您的情况下,您将构建您将要重定向的URL,然后在途中发送它们。
即http://localhost/Home/Listing/test1/test2
答案 1 :(得分:0)
首先,如果您使用的是MVC表单,请使用
<%= Html.DisplayFor(m => m.Id2) %>
而不是手动绘制它们。
并且Html表单不可能直接将值放入URL中。他们要么把它放在POST(标题变量)或GET(查询字符串)中。因此,如果你想要这种行为,你必须自己做Javascript。
和顺便说一下,如果你的路线接受了价值,这只能起作用。
context.MapRoute("{controller}/{action}/{id}/{id2}")