我的返回集合的Asp.net mvc动作生成包含system.linq.Enumerable的url,如何删除它们

时间:2012-05-30 11:37:35

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

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

IEnumerable<IType>

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

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

我希望删除任何内容后的内容。

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

这是我的行动方法

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

2 个答案:

答案 0 :(得分:0)

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

修改:根据您的代码,我们可以看到您的操作方法需要IEnumerable,因此无论您在何处调用此操作,都会将其传递给它。您无法做到,您必须在操作方法中生成列表。尝试类似:

public ActionResult Whatever()
{
    List<IType> whatever = new List<IType>();

    //populate your list here, then we can return it

    return View(whatever);
}

答案 1 :(得分:0)

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

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

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

正确的方法是将其包装在routevaluedictionary

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的回复标记为答案,因为它实际上误解了我的要求,也许我的要求不正确但也误导了我。