我的问题是我在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 /地图/ PARAM1NAME
但是当我导航到:
时它不会返回null/ StoreMap /地图/ PARAM1NAME / PARAM2NAME
答案 0 :(得分:0)
最有可能的默认路线是干扰。我相信项目模板中定义的默认路由如下所示:
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: "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);
}