3

大师们,

我已经定义了如下几条路线。

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 的路由值。

我们应该怎么做?请帮忙。

提前致谢

4

3 回答 3

1

即使你设法让它工作,你也必须用你的控制器动作来处理不同的参数。为什么不根据参数的数量创建不同的操作并完全避免这种用法。如果您尝试提供Model可能并不总是具有值的属性,则创建一个模型,而不是将动态传递Model给操作。

于 2013-11-06T12:28:39.730 回答
0

modelbinder 不知道如何处理动态操作参数。我所知道的最接近的是 JSON.net 中的 JObject。

你仍然需要弄清楚你收到了什么类型,反序列化它,并返回适当的视图。

于 2013-11-06T17:45:05.253 回答
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") }
);

我使用了硬编码的“投资组合”,因为这条路线只影响那个控制器。您可以通过以下方式使您的路线动态化:

    url: "{controller}/{*id}"

我以这种方式构建了控制器:

public class PortfolioController : Controller
{     
    public ActionResult Index(string id)
    {
        //Get Pictures from folder 'id'
    }
}

您可以在此处查看结果。

于 2020-04-19T20:23:53.577 回答