2011-07-02 42 views
17

我這樣做很多時候:Html.Action - 獲取與發佈

<div id='Product'> 
@Html.Action("Create", "Product") 
</div> 

很方便,因爲我可以委派一個產品創造形式的繪畫到另一個控制器行動的地方嵌入。不過,我遇到的問題是,該方法有時(我沒有弄清楚在什麼條件下)調用我的控制器動作的[HttpPost],當然哪個失敗。

有沒有辦法強制@Html.Action()來調用GET版本?

回答

18

Html.Action的工作方式是,如果當前頁面請求是post方法,那麼它將搜索名稱爲HttpPost的方法。

因此,發生的事情是您正在發佈當前頁面,並且該操作同樣假定所有應該執行的操作都必須是POST。

我不知道強迫它切換到不同的方法。

+5

是的,我也明白這一點。這是他們的一個可怕的假設。我最終做的是重命名這些操作,以免出現歧義 – ekkis

+0

這可能是最好的解決方案。很高興有幫助。 – Buildstarted

3

嘗試添加AcceptVerbs屬性到你的動作:

[AcceptVerbs(HttpVerbs.Get|HttpVerbs.Post)] 
public ActionResult Create() 
{ 
    //Your code 
} 

這將爲GET和POST請求的工作。

+0

嗯......是的,但這會迫使我將兩種行爲都編碼到同一個方法中......這意味着我需要一種方法來告訴方法內部Post或Get是否被執行......這將如何完成? – ekkis

-1

我剛剛遇到這個問題,很難確定。最後我用Html.RenderPartial代替,就像這樣:

<div id='Product'> 
@{Html.RenderPartial("_CreatePartial", new Product());} 
</div> 
0

我也有類似的問題,並有確實是一個解決方案。 只檢查請求是否獲得或使用IsPost物業,瞧在查看POST ....

@if(!IsPost)  
{  
    HTML.Action("ActionName")  
} 

問候誰在類似的問題了......