我有一个带有可选“id”参数的页面路由。定义如下:
routes.MapPageRoute(null,
"projects/{operation}/{id}",
"~/Projects/ProjectWizard.aspx",
true,
new RouteValueDictionary(new
{
operation = "new",
id = UrlParameter.Optional
}),
new RouteValueDictionary(new
{
operation = @"new|edit",
id = @"\d*"
})
);
该路线工作正常,但是当我到达页面时,如果我没有包含可选的“id”参数,那么我的代码在尝试转换为整数时会失败。
var operation = RouteData.Values["operation"].ToString();
var projectId = RouteData.Values.ContainsKey("id") ? Convert.ToInt32(RouteData.Values["id"]) : 0;
只要我在这样的路线中传递一个 ID,这就会很好:
http://webapp/projects/edit/123
projectId
等于 123,就像它应该的那样。但如果我不包括 ID:
http://webapp/projects/new
路线很好地转到页面,但我收到此错误:
无法将“System.Web.Mvc.UrlParameter”类型的对象转换为“System.IConvertible”类型。
它应该无法在路由数据值中找到键,然后将零分配给projectId
,但事实并非如此。我一直在尝试不同的方法来检查“id”路由值是否为空,但它似乎不太喜欢。