【问题标题】:My Asp.net mvc actions that return collection generate urls containing system.linq.Enumerable, how to remove them我返回集合的 Asp.net mvc 操作生成包含 system.linq.Enumerable 的 url,如何删除它们
【发布时间】:2013-05-19 06:05:06
【问题描述】:

我有一个 mvc 应用程序,它基本上生成视图,这些视图基本上是集合但特定类型的集合..so 即

IEnumerable<IType>

现在我的网址包含这样的内容

www.site/home/section/param?System.Linq.Enumerable%.....

我想在节后删除任何内容。

我已经尝试过 routeMap 但无法省略 system.linq 等。请有任何想法或帮助

这是我的操作方法

public ActionResult Whatever(IEnumerable<IType> whatever)
        {
            return View(whatever);
        }

【问题讨论】:

    标签: c# asp.net-mvc url-rewriting


    【解决方案1】:

    你不能在 URL 中传递这样的集合,你不应该在重定向时将它们添加到 RouteValueDictionary。只需发送一些可以帮助您在重定向到的操作中获得所需内容的基本信息。

    编辑:根据您的代码,我们可以看到您的操作方法采用IEnumerable,因此无论您在何处调用此操作,都将传递给它。你不能这样做,你必须在 action 方法中生成你的列表。尝试类似:

    public ActionResult Whatever()
    {
        List<IType> whatever = new List<IType>();
    
        //populate your list here, then we can return it
    
        return View(whatever);
    }
    

    【讨论】:

    • 我没有在任何地方传递集合,这个 url 是从 mvc 本身生成的。我只是在视图中显示一个集合。我的操作通过此调用“返回视图(某物)”返回视图
    • @user182630 你一定是在某个地方通过重定向传递它,你能发布你的操作方法吗?
    • @user182630 看看您的操作方法如何将IEnumerable 作为参数?那是你的问题。您必须在 Whatever 操作方法中生成它,然后将其返回到视图。
    • 但我的观点是 ienumerable,它不应该与 system.linq.enumerable 有任何关系
    • @user182630 没关系,你仍然可以返回它,但你不能将它传递给 Action 方法。 System.Linq.IEnumerable 是 IEnumerable。
    【解决方案2】:

    上面的问题很有趣,我花了一段时间才回到我之前编写的 mvc 应用程序。答案很简单,但并不明显。

    在当前的 mvc3 中,即使您将对象作为匿名类型传递,将您的视图映射到您的视图模型,它也总是可以计算出集合类型,并以某种方式将其附加到 url,在这种情况下,它会将整个案例附加到网址为

    http://www.website.com/param=system.linq.enumerable.where.select..

    正确的方法是将其包装在路由值字典中

    new RouteValueDictionary(new { controller = Constants.HOMECONTROLLER, action = Constants.APPLYAPP }));

    如果你将任何东西从一个动作传递到另一个动作,使用这个

    return new RedirectToRouteResult(Constants.DEFAULTROUTE,
                         new RouteValueDictionary(new { controller = Constants.HOMECONTROLLER, action = Constants.APPLYAPP }));
    

    而不是 RedirecttoAction,因为这似乎会导致上面的 url。

    感谢 MattyTommo 的帮助,但在我的情况下它无关紧要,但它可能对其他人有帮助。我根本无法将mattytommo的回复标记为答案,因为它实际上误解了我的要求,也许我的要求不正确但也误导了我。

    【讨论】:

      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多