硕士,
我定义了以下几条路线。
routes.MapRoute(
name: "Default1",
url: "{a}",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "Default2",
url: "{a}/{b}",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "Default3",
url: "{a}/{b}/{c}",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "Default4",
url: "{a}/{b}/{c}/{d}",
defaults: new { controller = "Home", action = "Index" }
);
和在HomeController中,
public ActionResult Index(dynamic data)
{
return View();
}
我在Index方法的开头设置了一个断点现在,当我点击以下URL时:http:// {MylocalIP:port} / a / b停留在断点上。但我无法提取a和b的路由值。
我们如何做到这一点?请帮助。
提前感谢
即使您设法使它起作用,也必须使控制器动作来处理其他参数。为什么不根据参数的数量创建不同的操作,而完全避免这种用法呢?如果您尝试提供可能并不总是具有值的Model
的属性,请创建一个模型,而不是动态传递Model
到操作。
Modelbinder不知道如何处理动态动作参数。我知道的最接近的是JSON.net中的JObject。
您仍然必须弄清楚收到的是什么类型,将其反序列化,然后返回适当的视图。
我对操作和动态数量的参数有类似的要求。就我而言,我需要在URL中包含一个文件夹路径。此路径可以包含不同数量的子文件夹。 MVC会将子文件夹解释为参数。我在Bipin Joshi中找到了解决此问题的方法。
我这样写我的路线:
routes.MapRoute(
name: "Portfolio",
url: "Portfolio/{*id}",
defaults: new { controller = "Portfolio", action = "Index", id = UrlParameter.Optional },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
我使用了硬编码的“ Portfolio”,因为此路由仅影响该控制器。您可以使用:
使路线动态化 url: "{controller}/{*id}"
我以这种方式构建了控制器:
public class PortfolioController : Controller
{
public ActionResult Index(string id)
{
//Get Pictures from folder 'id'
}
}
您可以检查结果here。