1

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

IEnumerable<IType>

现在我的网址包含这样的东西

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

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

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

这是我的操作方法

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

2 回答 2

0

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

在当前的 mvc3 中,即使您将对象作为匿名类型传递,将您的视图映射到您的视图模型,它总是会计算出集合类型并以某种方式将其附加到 url,在这种情况下,它将整个案例附加到 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 的回复标记为答案,因为它实际上误解了我的要求,也许我的要求不正确但也误导了我。

于 2012-05-30T13:02:28.710 回答
0

你不能在 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);
}
于 2012-05-30T11:46:11.043 回答