2012-03-20 22 views
5

我有一個動作列表MVC3爲什麼我會收到「子操作不允許執行重定向操作」錯誤?

//[HttpGet] (will come back to that!) 
    public ViewResult List(int page = 1) 
    { 
     //blah blah blah 
     return View(viewModel); 
    } 

在其看來,我們渲染動作:

@{   
    Html.RenderAction("UpdateSearch"); 
} 

行動的定義:

[ChildActionOnly] 
[HttpGet] 
public PartialViewResult UpdateSearch() 
{ 
    // do something and display a form in view 
    return PartialView(so); 
} 

[HttpPost] 
public RedirectToRouteResult UpdateSearch(Options searchOptions) 
{ 
    // do something and redirect to List 
    return RedirectToAction("List"); 
} 

和我越來越:兒童行動不準每次有人提交表單時都會執行重定向操作異常。我是MVC3的新手,但它看起來像重定向也是一個POST,因爲如果上面的List方法的[HttpGet]未被註釋爲「找不到資源」,就會發生。

如何更改重定向的Http方法還是我做錯了什麼?我確實嘗試了Bing,但沒有成功。

回答

3

重定向信息存儲在響應頭中。但是,在執行子操作時已經發送了響應,因此無法寫入標頭。

總之,除了通過在客戶端使用javascript之外,沒有辦法通過子動作執行重定向。

+0

這是有道理的,但我的示例中的重定向不是通過帶有[ChildActionOnly]註釋的方法完成的。問題是,當[HttpPost] UpdateSearch重定向到List時,它會與POST重定向,因此[HttpPost]方法(試圖)用於視圖中的部分生成。我可以使用RouteValueDictionary改變它嗎? – 2012-03-20 15:34:06

+0

向我們展示局部視圖的內容。這個問題可能在於BeginForm中的錯誤路由定義,但是如果沒有看到視圖,我不能說出來。 – 2012-03-20 15:52:46

+2

你說得對。 爲了修正它,它足以動作參數在UpdateSearch視圖(獲取,兒童版本),所以從變化添加到BeginForm方法: /@使用(Html.BeginForm()){ 到: /@使用(Html.BeginForm(「UpdateSearch」)){ 修復了這個問題。你能解釋爲什麼嗎? – 2012-03-20 16:03:03

相關問題