控制器操作方法:
public ActionResult Details(int key)
{
CustomerContext customerContext = new CustomerContext();
var customer = customerContext.Customers.Single(c => c.CustomerKey == key);
return View(customer);
}
注册路线:
routes.MapRoute(
name: "Details",
url: "{controller}/{action}/{key}",
defaults: new { controller = "Customer", action = "Details", key = UrlParameter.Optional } );
当我使用这个uri:
http://localhost/Lab100_1/customer/details?key=11000
我得到了正确的客户详细信息......但是
当我使用这个uri:
http://localhost/Lab100_1/customer/details/11000
我收到此错误:
参数字典包含非可空类型'System.Int32'的参数'key'的空条目,用于'Lab100_1.Controllers.CustomerController'中的方法'System.Web.Mvc.ActionResult Details(Int32)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。
我已经尝试过: 然后路由配置:默认值(传递默认值):
new { controller = "Customer", action = "Details", key = 0}
控制器动作方法中的使参数为nullable:
public ActionResult Details(int? key)
然而我得到了同样的错误 - 我有一种感觉,如果传递参数作为查询字符串工作...然后为什么传递它作为URI参数不起作用... ???我有路线配置...任何帮助非常感谢...谢谢
答案 0 :(得分:0)
我认为您的配置低于默认路由配置。您应该将其设置为优先于默认路由的优先级。所以你的路线配置应该是这样的 -
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default1",
url: "{controller}/{action}/{key}",
defaults: new { controller = "Customer", action = "Details", key = UrlParameter.Optional },
constraints: new { key = @"\d+" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
然后它应该工作。 更新:使用约束。