【问题标题】:Adding an IEnumerable to a RouteValueDictionary - is this possible?将 IEnumerable 添加到 RouteValueDictionary - 这可能吗?
【发布时间】:2011-08-16 18:21:48
【问题描述】:

我正在使用 ASP.Net MVC 2,但遇到了一个小问题。我需要从值列表中生成一个 url。

使用以下代码:

RouteValueDictionary dic = new RouteValueDictionary();
dic.Add("mylist", new [] { 1, 2, 3 });
return helper.Action(dic["action"] as string, dic["controller"] as string, dic);

我得到了网址/whatever/System.Int32[],这显然不是我想要的。

生成此类 URL 的 ASP.Net MVC 2 首选方式是什么?我知道modelbinder可以处理列表,但是如何生成呢?

如果方法不同,也可以快速说明它是如何在 MVC 3 中完成的。

【问题讨论】:

  • 您希望您的 URL 在此列表中看起来如何?
  • /whatever?list[0]=1&list[1]=2 可以与默认的模型绑定器一起使用,但对于这种情况,更漂亮的可能是 list=1&list=2&list=3。在任何情况下,任何适用于默认模型绑定器和默认 URL 生成器的东西

标签: c# asp.net asp.net-mvc-3 asp.net-mvc-2


【解决方案1】:

看看这个先前的响应是否对你有帮助(mvc 3 也是一样的——它与 asp.net 4 的路由引擎相同)

ASP.NET MVC - Pass array object as a route value within Html.ActionLink(...)

【讨论】:

  • 啊,谢谢。没能通过 SO 或谷歌找到那个 - 很奇怪。
  • 我的大脑是通过ICaffeine接口直接插入google的哈哈
【解决方案2】:

您始终可以使用 ToString() 覆盖来创建自己的 List 类,以打印您想要的方式。这似乎是最简单(但也许是最“骇人听闻”)的方法。

public MyRouteList<T> : List<T>
{
     public override string ToString()
     {
          return string.Join("&", this.Select(x => "list=" + x.ToString()));
     }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2013-08-22
    • 1970-01-01
    • 2015-10-03
    • 2017-02-13
    相关资源
    最近更新 更多