Mat*_*ell 5 c# forms asp.net-mvc routing
我有这样的动作:
public class News : System.Web.Mvc.Controller
{
public ActionResult Archive(int year)
{
/ *** /
}
}
Run Code Online (Sandbox Code Playgroud)
有这样的路线:
routes.MapRoute(
"News-Archive",
"News.mvc/Archive/{year}",
new { controller = "News", action = "Archive" }
);
Run Code Online (Sandbox Code Playgroud)
我所在的网址是:
News.mvc/Archive/2008
Run Code Online (Sandbox Code Playgroud)
我在这个页面上有一个表格,如下所示:
<form>
<select name="year">
<option value="2007">2007</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
如果在表单中选择"2007",则提交表单应转到News.mvc/Archive/2007.
这要求"action"属性为"News.mvc/Archive".
但是,如果我声明这样的表单:
<form method="get" action="<%=Url.RouteUrl("News-Archive")%>">
Run Code Online (Sandbox Code Playgroud)
它呈现为:
<form method="get" action="/News.mvc/Archive/2008">
Run Code Online (Sandbox Code Playgroud)
有人可以让我知道我错过了什么吗?
我认为你有几个问题。
首先,您的路由没有“年份”的默认值,因此 URL“/News.mvc/Archive”实际上对于路由目的无效。
其次,您希望表单值显示为路由参数,但这不是 HTML 的工作方式。如果您使用带有选择和提交的普通表单,您的 URL 最终将在末尾带有“?year=2007”。这正是 GET 方法表单在 HTML 中的设计方式。
因此,您需要就什么是重要的做出一些结论。