ASP.NET 视预览4-停下网址。RouteUrl()等。使用现有参数
-
09-06-2019 - |
题
我有一个动作就像这样:
public class News : System.Web.Mvc.Controller
{
public ActionResult Archive(int year)
{
/ *** /
}
}
一路线,是这样的:
routes.MapRoute(
"News-Archive",
"News.mvc/Archive/{year}",
new { controller = "News", action = "Archive" }
);
URL我上的是:
News.mvc/Archive/2008
我有一个形式上的这一页是这样的:
<form>
<select name="year">
<option value="2007">2007</option>
</select>
</form>
提交的形式应该去新闻。视/Archive/2007如果'的2007年选择的形式。
这需要形成"行动"属性"的新闻。视/存档"。
然而,如果我声明形成这样的:
<form method="get" action="<%=Url.RouteUrl("News-Archive")%>">
它呈现为:
<form method="get" action="/News.mvc/Archive/2008">
有人可以请让我知道我的失踪?
解决方案
你有几个问题,我想。
首先,你的路线没有默认值为"一年",因此该网址"/新闻。视/存档"实际上是无效的路由选择的目的。
第二,你在期待的形式的数值显示出来,因为路线参数,但这并不是如何HTML工作。如果你利用一个普通的形式与选择和一个提交,你的网址将最终具有"?year=2007年"在结束他们。这仅仅是如何获取方式的设计工作在HTML。
所以你需要得出一些结论是关于什么是重要的。
- 如果你想让用户能够选择的东西从拉和改变提交的网址,那么你必须要使用Javascript实现这一点(通过拦截形式提交,并制订正确的URL)。
- 如果你没事/新闻。视/存档?year=2007年作为你的网址,然后你应该删除的{年}指定的路线完全。你仍然可以离开"int"年度参数在您的行动,因为形式的价值也会填充的行动方法的参数。
其他提示
我想我已经工作了,为什么-路线包括{年}所以产生的路线总是会太..
如果任何人都可以证实吗?
解决方案
好吧这里是解决方案,(由于布拉德领导我那里)。
1)要求的默认值在路线:
routes.MapRoute(
"News-Archive",
"News.mvc/Archive/{year}",
new { controller = "News", action = "Archive", year = 0 }
);
2)加重定向分析获得的参数,虽然他们是URL段。
public ActionResult Archive(int year)
{
if (!String.IsNullOrEmpty(Request["year"]))
{
return RedirectToAction("Archive", new { year = Request["year"] });
}
}
3)确保你有你向代码要求params 之前 任何代码,用于向"默认"年的条目。即
public ActionResult Archive(int year)
{
if (!String.IsNullOrEmpty(Request["year"]))
{
return RedirectToAction("Archive", new { year = Request["year"] });
}
if (year == 0)
{
/* ... */
}
/* ... */
}
3)明确指定的默认值年在网址。RouteUrl()呼吁:
Url.RouteUrl("News-Archive", new { year = 0 })
不隶属于 StackOverflow