大师,
我已经定义了以下几条路线。
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();
}
我在索引方法的开头设置了一个断点 现在,当我点击URL时:http:// {MylocalIP:port} / a / b坚持断点。 但我无法提取路径值,这是一个&湾
我们怎么做? 请帮忙。
提前致谢
答案 0 :(得分:1)
即使你设法让它工作,你也不得不考虑你的控制器动作来处理不同的参数。为什么不根据参数的数量创建不同的操作,并完全避免这种用法。如果您尝试提供可能并非总是具有值的Model
属性,则创建模型而不是传递动态将Model
传递给操作。
答案 1 :(得分:0)
模型绑定器不知道如何处理动态动作参数。我所知道的最接近的是JOSON,在JSON.net中。
您仍需要弄清楚您收到的类型,反序列化,并返回相应的视图。
答案 2 :(得分:0)
我对动作和动态数量的参数有类似的要求。就我而言,我需要在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。