1

我的问题是我在 MVC 中制作了一个 Map Route,它采用三个参数。当我提供全部三个或两个时,参数会从 URL 传递到我的控制器。但是,当我只提供第一个参数时,它不会被传递并返回 null。不知道是什么导致了这种行为。

路线:

        routes.MapRoute(
            name: "Details",                                              // Route name
            url: "{controller}/{action}/{param1}/{param2}/{param3}",                           // URL with parameters
            defaults: new { controller = "Details", action = "Index", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }  // Parameter defaults
         );

控制器:

    public ActionResult Map(string param1, string param2, string param3)
    {

        StoreMap makeMap = new StoreMap();
        var storemap = makeMap.makeStoreMap(param1, param2, param3);
        var model = storemap;
        return View(model);
    }

当我导航到以下位置时,字符串 param1 返回 null:

/StoreMap/Map/PARAM1NAME

但是当我导航到以下位置时它不会返回 null:

/StoreMap/Map/PARAM1NAME/PARAM2NAME

4

1 回答 1

0

很可能是默认路由有干扰。我相信项目模板中定义的默认路由如下所示:

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
     );

只有一个参数的 URL 与此模式匹配,但由于您id的方法签名中没有参数,因此该值不会填充到您的任何参数中。

您可以尝试更改“详细信息”路由以将控制器硬编码为“详细信息”,如下所示,并将其移动到默认路由之前:

    routes.MapRoute(
        name: "Details",                                              // Route name
        url: "Details/{action}/{param1}/{param2}/{param3}",                           // URL with parameters
        defaults: new { controller = "Details", action = "Index", param1 = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }  // Parameter defaults
     );


    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
     );

或者,尝试将路由中的第一个参数和方法签名重命名为id.

    routes.MapRoute(
        name: "Details",                                              // Route name
        url: "{controller}/{action}/{id}/{param2}/{param3}",                           // URL with parameters
        defaults: new { controller = "Details", action = "Index", id = UrlParameter.Optional, param2 = UrlParameter.Optional, param3 = UrlParameter.Optional }  // Parameter defaults
     );


public ActionResult Map(string id, string param2, string param3)
{

    StoreMap makeMap = new StoreMap();
    var storemap = makeMap.makeStoreMap(id, param2, param3);
    var model = storemap;
    return View(model);
}
于 2012-11-14T05:15:25.090 回答