我有以下路线:
routes.MapRoute("Archive", "archive/{year}", new
{
controller = "Archive",
action = "Results"
}
);
我的路线工作正常,但我希望我的网址显示如下:
http://mysite.com/archive/2008
当我点击搜索按钮而不只是:
http://mysite.com/archive
我不想通过创建到该网址的操作链接来执行此操作,我希望提交按钮执行此操作。
编辑:
更多信息。在我的主页上,我有一个文本框,当单击提交按钮时,将文本框中键入的年份值传递给我的存档控制器中的Action方法结果,该控制器采用一个参数year。我现在正在方法中获得正确的值,我只想在URL中显示年份。如果我像上面那样在网址中手动输入年份,它的效果就像我期望的那样。
谢谢!
答案 0 :(得分:3)
您应该将Year参数传递给BeginForm(),例如:
<%
using (Html.BeginForm("Results", "Archive", new { year = DateTime.Now.Year }))
{
// form
}
%>
答案 1 :(得分:1)
在这种情况下,您需要将 {year}
参数的默认值设置为 2008
。因此,您需要的路线如下:
routes.MapRoute("Archive",
"archive/{year}",
new { controller = "Archive", action = "Results", year = 2008 } );
你也可以使这个动态:
routes.MapRoute("Archive",
"archive/{year}",
new { controller = "Archive", action = "Results", year = DateTime.Now.Year } );
但是,我应该注意,这只是在Web应用程序启动时才是动态的,因为路由是在Application_Start
定义的,只发生一次,并且DateTime.Now.Year
的值被缓存为值那个时候。
答案 2 :(得分:1)
您还可以在提交表单
时发布一个名为“year”的隐藏表单元素<%=Html.Hidden("year",2008) %>