到目前为止,我一直在使用ASP.NET MVC 3 BETA。在RC2版本更新之前,一切正常。我当然读过ScottGu's article about RC2。
我的问题如下。基本上我有2个控制器:
public class DynamicPageController : Controller
{
public ActionResult Redirect(string resource, int? pageNumber, int? id)
{
}
}
public class SystemController : Controller
{
public ActionResult Index()
{
}
}
在Globals.asax中我有这样的路线:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"SystemRoute",
"System/{action}",
new { controller = "System", action = "Index" }
);
routes.MapRoute(
"PageRoute",
"{resource}/{id}/{pageNumber}",
new { controller = "DynamicPage", action = "Redirect", resource = UrlParameter.Optional, pageNumber = UrlParameter.Optional, id = UrlParameter.Optional }
);
}
在代码中,我创建了简单的链接:
System.Web.Mvc.UrlHelper u = new System.Web.Mvc.UrlHelper(context);
string url = u.Action("Index", "System");
,两个版本(BETA和RC2)中的网址都是“/ my_app / System”
但是下面的代码(语法与上面的相同,只有控制器和动作名称不同):
string url = u.Action("Redirect", "DynamicPage", new RouteValueDictionary(new { resource = "Home" }));
给出在RC2中为空的url。它应该是(事实上在BETA中)“/ my_app / Home”
为什么?这是一个错误吗?如何为“ DynamicPage ”控制器创建网址?
此致
BTW:我现在可以从哪里下载ASP.NET MVC BETA版本以及ASP.NET Web Pages 1.0安装程序?自RC2发布以来,我发现上述2个安装程序时遇到了问题。通常我会升级我的代码,但上面描述的这个问题让我在BETA呆了一段时间,因为我现在没有时间迁移和测试所有内容。
更新
我用于这种情况的解决方案,当我有一个接一个存在两个可选参数时,就是在现有的 PageRoute 路由之前添加新的 PageRouteCore 路由:
routes.MapRoute(
"PageRouteCore",
"{resource}",
new {controller = "DynamicPage", action = "Redirect"}
);
这基本上是相同的路线但没有可选参数。现在,url创建的行为就像我预期的那样。