我有一个mvc应用程序基本上生成视图,这些视图是基本集合,但是特定类型的集合。所以
IEnumerable<IType>
现在我的网址包含这样的内容
www.site/home/section/param?System.Linq.Enumerable%.....
我希望删除任何内容后的内容。
我已尝试过routeMap但无法省略system.linq等任何想法或帮助请
这是我的行动方法
public ActionResult Whatever(IEnumerable<IType> whatever)
{
return View(whatever);
}
答案 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的回复标记为答案,因为它实际上误解了我的要求,也许我的要求不正确但也误导了我。