1

我有以下路线:

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

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

http://mysite.com/archive/2008

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

http://mysite.com/archive

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

编辑:

更多信息。在我的主页上,我有一个文本框,当单击提交按钮时,它将在文本框中键入的年份值传递给 Action 方法,结果在我的存档控制器中使用一个参数,年份。我现在在方法中得到了正确的值,我只想在 url 中显示年份。如果我像上面一样在 url 中手动输入年份,它也会像我预期的那样工作。

谢谢!

4

3 回答 3

3

您应该将 Year 参数传递给 BeginForm(),例如:

<% 
    using (Html.BeginForm("Results", "Archive", new { year = DateTime.Now.Year }))
    {
        // form
    }
%>
于 2009-08-18T07:42:19.280 回答
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被缓存为当时的值。

于 2009-08-18T05:10:09.697 回答
1

您还可以有一个名为“year”的隐藏表单元素,当您提交表单时该元素会被发布

<%=Html.Hidden("year",2008) %>
于 2009-08-18T15:11:28.790 回答