2011-04-13 49 views
5

所以我在這裏看到this question這個,但它並沒有真正解決這個問題給我。ASP.NET MVC 3 + Razor錯誤:不允許子動作執行重定向動作

我有一個ASP.NET MVC 3 + Razor應用程序,運行在我的開發電腦上的IIS5上,然後是我的開發Web服務器的IIS6。一切工作很好,直到我部署它。我正在部署所有的東西,在這方面沒有問題(我可以說)。

現在我得到這個子操作不允許在我的頁面上執行重定向操作錯誤。我不確定如何查明它失敗的位置。

我使用@ Html.Action在某些下拉框與數據拉:

public ActionResult Hierarchy() 
    { 
     List<Store> storeList = DBService.getStores();    
     if (DBService.Error != null) 
      return RedirectToError(DBService.Error); 

     List<Department> deptList = DBService.getDepts(); 
     if (DBService.Error != null) 
      return RedirectToError(DBService.Error); 

     VM_Hierarchy hierarchy = new VM_Hierarchy(storeList, deptList); 

     return View(hierarchy); 
    } 

如果我刪除@ Html.Action線,頁面將呈現。然後,將打破,如果我做一個AJAX請求到一個控制器動作像這樣:

[HttpPost] 
    public ActionResult InventoryList(string fromDate, string toDate) 
    { 
     List<Inventory> inventories = DBService.getInventories(fromDate, toDate); 

     if (DBService.Error != null) 
      return RedirectToAction("Error"); 

     return View(inventories); 
    } 

如果這是不正確的,我怎麼重定向到一個錯誤頁面或規定在獲取返回什麼看法張貼?任何幫助表示讚賞。謝謝。

回答

7

這可能是因爲您在部署時從您的數據庫服務中收到錯誤,而您本地沒有收到錯誤。這導致它嘗試從一個你不能做的兒童動作重定向。

您可能想要嘗試獲取主操作中的下拉數據,並將其全部放入ViewModel中,以便您不使用子操作。如果失敗了,你可以重定向到你心中的內容。對於AJAX,您需要處理客戶端上的錯誤並做一些明智的事情,您不能僅僅通過AJAX調用返回重定向。

這個問題有一些進一步的信息: Why are Redirect Results not allowed in Child Actions in Asp.net MVC 2

+0

因此,假設重定向都發生在服務器上,它只是發回新頁面的HTML是錯誤的嗎?我不想實際重定向頁面,只是執行不同的操作併發回不同的視圖。 – IronicMuffin 2011-04-13 15:55:06

+0

那麼,從控制器重定向都在服務器上,問題是你從一個子動作或AJAX調用重定向 - 在這兩種情況下,頁面的一部分已經存在,並且你不能只在頁面中間。 – 2011-04-13 15:59:09

+0

我想我不會效仿。我想我要麼獲取原始視圖的HTML或新的視圖的HTML呈現到頁面。我看不出問題在哪裏。我想我會回發JavaScript的部分?如何根據服務器端發生的情況選擇要加載的部分? – IronicMuffin 2011-04-13 16:04:32

1

我也有類似的問題,但對我的生活,我無法揣摩出重定向來自何處。一旦我明白了,我想我會發佈一個答案,以防萬一發生在其他人身上。

如果重定向的來源不是來自勢在必行代碼明顯,例如:

[AuthoriseThis] 
    public ActionResult Details(SomethingModel something) 
    { 
     return PartialView(something); 
    } 

看看聲明代碼!

在我的情況下,這是一個授權問題,因此該屬性導致重定向,我的眼睛過濾了該屬性的存在。

2

如果你把孩子動作 (ControllerContext.ParentActionViewContext.Controller as System.Web.Mvc.Controller).Response.Redirect(Url.Action("Action", "Controller"));它會從childaction重定向。

相關問題