2017-02-17 42 views
0

我有以下HTML:FormMethod.Post空隙控制器

using (Html.BeginForm("EmailSend", "Home", FormMethod.Post)) 
{ 
code to enter email and press submit 
} 

和無效控制器:

[HttpPost] 
[ValidateAntiForgeryToken] 
public void EmailSend() 
{ 
code to send email 
} 

很顯然,因爲我負責的一個空白控制器它沒有視圖來顯示。 我只想在我的視圖中從我的提交按鈕中觸發此控制器,而不要求重定向。我想,既然這不是ActionResult它應該明白嗎?

如何在不重定向的情況下觸發我的控制器?我必須使用jQuery或Ajax嗎?

+0

Ajax,不要使其失效,使用ActionResult並返回'new EmptyResult()'。 –

回答

0

從瀏覽器發佈信息需要顯示給用戶。您可以返回,例如:

return Content("OK"); 

但是,然後用字面上會看到純文本「確定」的迴應。如果你想觸發一個即開即忘的操作,打開一個新的窗口到這個後期操作(可以將_target="blank"添加到表單中),然後返回一個帶有確認的虛擬視圖,或者JS來關閉窗口,或者其他任何東西。

或者,使用jQuery發送AJAX請求非常簡單。

$.ajax({ 
    type: "post", 
    url: "@Url.Action("EmailSend")", 
    data: $("#form").serialize(), 
    success: function() { alert("Email successful"); }, 
    error: function() { alert("An error occurred"); } 
}); 

或類似的東西,其中$(「#形式」)是指一個HTML表單,並且參數獲得序列化和發送到服務器。 MVC仍然會執行對象屬性以形成與標準HTTP POST操作相匹配的參數匹配。

這是another example。有other plugins也是選項。

+0

謝謝你的回答! - 我會不得不忘記我的beginform?請記住,我有一個輸入表單,當我按下提交時,我非常想將參數傳遞給控制器​​。 –

+0

表單將正常工作;這就是$(「#form」)。serialize()是什麼;它採取的形式(給它一個ID並用#THATID替換#form)並將其序列化爲名稱/值參數以傳遞,因此無論是AJAX帖子還是標準HTTP帖子,兩者都將以相同的方式工作。 –