就在我认为我已经弄清楚了路由时,它并没有按照我认为的方式工作。我正在使用 ASP.Net MVC 4 RC。这是我的路由配置:
routes.MapRoute
(
"TwoIntegers",
"{controller}/{action}/{id1}/{id2}",
new { controller = "Gallery", action = "Index", id1 = new Int32Constraint(), id2 = new Int32Constraint() }
);
routes.MapRoute
(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这是我的路线限制:
public class Int32Constraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
if (values.ContainsKey(parameterName))
{
int intValue;
return int.TryParse(values[parameterName].ToString(), out intValue) && (intValue != int.MinValue) && (intValue != int.MaxValue);
}
return false;
}
}
/{domain.com}/PageSection/Edit/21
它在“TwoIntegers”路线上停止。很明显,没有传递第二个整数。
这是我的错误:
参数字典包含“SolutiaConsulting.Web.ContentManager.Controllers.PageSectionController”中方法“System.Web.Mvc.ActionResult Edit(Int32)”的不可空类型“System.Int32”的参数“id”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数
我究竟做错了什么?我首先列出了更具体的路线。请帮忙。