Asp.net mvc动作具有动态参数

时间:2013-11-06 12:21:58

标签: c# asp.net-mvc-4 asp.net-mvc-routing

大师,

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

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坚持断点。 但我无法提取路径值,这是一个&湾

我们怎么做? 请帮忙。

提前致谢

3 个答案:

答案 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