0

在我有限的(2 周)asp.net MVC3 经验中,对于大多数操作方法,我从来不需要添加路由注册。但我注意到,如果操作方法有一个输入参数,那么我无法使用 www.mysite.com/myController/myAction/myParameter1/myParameter2/myParameter3 形式的 url 访问该方法(没有 ? 标记),除非我绘制路线。这就是它应该的样子吗?

4

2 回答 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 回答