在我有限的(2 周)asp.net MVC3 经验中,对于大多数操作方法,我从来不需要添加路由注册。但我注意到,如果操作方法有一个输入参数,那么我无法使用 www.mysite.com/myController/myAction/myParameter1/myParameter2/myParameter3 形式的 url 访问该方法(没有 ? 标记),除非我绘制路线。这就是它应该的样子吗?
问问题
108 次
2 回答
2
默认情况下,您已经注册了路由:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
它接受一个名为 id 的参数,因此您的操作:
public ActionResult MyAction(string id)
将“捕获”请求:
www.mysite.com/MyController/MyAction/parameter_value
并将id
获得值“parameter_value”。
如果您需要多个参数(或参数必须是“id”以外的名称),那么您必须注册新路由。
如果您有 2 个参数,您将像这样注册路由:
routes.MapRoute(
"Default",
"{controller}/{action}/{parameter1}/{parameter2}",
new { controller = "Home", action = "Index", parameter1 = UrlParameter.Optional, parameter2=UrlParameter.Optional }
);
你的行动可能是:
public ActionResult MyAction(string parameter1, int? parameter2)
于 2012-08-06T00:31:47.267 回答
1
是的,您需要global.asax
根据您的要求注册路线自定义路线。您必须通过以下方式注册路线:
routes.MapRoute(
"routeName", // Route name
"{controller}/{action}/{myParameter}", // URL with parameters
new { controller = "Home", action = "Index", myParameter= "" } // Parameter defaults
);
因此,通过上述路由,它确保每当您的 url 采用上述格式时,后面的参数"action/"
将被视为参数.....
对于您的 url 中的多个参数,您可以像这样注册:
routes.MapRoute(
"routeName", // Route name
"{controller}/{action}/{myParameter1}/{myParameter2}/{myParameter3}", // URL with parameters
new { controller = "Home", action = "Index", myParameter1= "", myParameter2= "", myParameter3= "" } // Parameter defaults
);
于 2012-08-06T00:33:18.327 回答