MVC路由问题

时间:2009-08-18 05:06:33

标签: asp.net asp.net-mvc asp.net-mvc-routing

我有以下路线:

routes.MapRoute("Archive", "archive/{year}", new
    {
        controller = "Archive",
        action = "Results"
    }
);

我的路线工作正常,但我希望我的网址显示如下:

http://mysite.com/archive/2008

当我点击搜索按钮而不只是:

http://mysite.com/archive

我不想通过创建到该网址的操作链接来执行此操作,我希望提交按钮执行此操作。

编辑:

更多信息。在我的主页上,我有一个文本框,当单击提交按钮时,将文本框中键入的年份值传递给我的存档控制器中的Action方法结果,该控制器采用一个参数year。我现在正在方法中获得正确的值,我只想在URL中显示年份。如果我像上面那样在网址中手动输入年份,它的效果就像我期望的那样。

谢谢!

3 个答案:

答案 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) %>