2012-05-30 37 views
1

我有一個mvc應用程序,基本上生成的視圖是bascially集合,但特定類型的集合..所以即,即我的Asp.net MVC操作返回集合生成包含system.linq.Enumerable的URL,如何刪除它們

​​

現在我的網址包含這樣的東西

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

我想刪除部分後,任何東西。

我都試過了,但的RouteMap已經無法ommit的System.Linq的等任何意見或幫助,請

這裏是我的操作方法

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

回答

0

上面的問題是一個非常有趣,我花了一段時間,已經回到我以前寫的MVC應用程序。答案很簡單,但並不明顯。

而且它似乎在當前的mvc3中,即使您將對象作爲匿名類型傳遞給將視圖映射到您的視圖模型,它始終會處理collectiontype並以某種方式附加到url,在這種情況下,它會將整個案例附加到URL作爲

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

任何方式正確的方法是把它包裝在一個routevaluedictionary

新RouteValueDictionary(新{控制器= Constants.HOMECONTROLLER,動作= Constants.APPLYAPP}));

,如果你是傳遞任何東西,從一個動作到另一個使用這種

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

,而不是RedirecttoAction因爲似乎這導致在上面的網址。

感謝MattyTommo的幫助,但它在我的情況下無關緊要,但可能對其他人有幫助。我不能將馬蒂莫莫的答覆標記爲答案,因爲它實際上誤解了我的請求,也許我的請求不正確,但也誤導了我。

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); 
} 
+0

我沒有在任何地方傳遞集合,這個URL是從mvc本身生成的。我只是在視圖中顯示一個集合。我的行動通過這個調用返回一個視圖'return View(something)' – user182630

+0

@ user182630你必須通過重定向傳遞它,你可以發佈你的行動方法嗎? – mattytommo

+0

當然,更新超過 – user182630

相關問題