具有动态输入参数的Asp.net mvc动作

问题描述 投票:3回答: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的路由值。

我们如何做到这一点?请帮助。

提前感谢

c# asp.net-mvc-4 asp.net-mvc-routing
3个回答
1
投票

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


0
投票

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

您仍然必须弄清楚收到的是什么类型,将其反序列化,然后返回适当的视图。


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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.