2012-09-28 48 views
0

我有一個動作如下:MVC 3 - 自動將HttpPost

public ActionResult ChangeFeeCheck(string id) 
    { 

     ViewBag.id = id; 
     return View(); 
    } 

對我的看法,我有以下幾點:

@{ 
     ViewBag.Title = "CreateList"; 
    } 



    Please enter first name <br /><br /> 


    @using (Html.BeginForm()) 
    { 

    @Html.Textbox("firstname") 

    <input type="button" id="SaveChanges" value="Save" /> 
    }  

當我按一下按鈕,我期待它到以下內容

[HttpPost] 
public ActionResult ChangeFeeCheck(string firstname) 
    { 
     ..... 

    } 

我不知道什麼時候MVC會自動去HttpPost或如果我當需要手動h就在那裏。在上面,它不直接去那裏。我必須使用

window.location.href 

並傳遞控制器/操作的URL。

含義,是不是

Html.BeginForm() 

的HttpPost默認的(相同的名稱HTTPGET)

+1

這將不會編譯。 – SLaks

+0

@SLaks。問題在於按鈕的類型。 – gdoron

回答

1

如果你正在跟蹤在這裏「約定優於配置」的規則,那麼你就在這裏創建的視圖必須是ChangeFeeCheck行動,並ChangeFeeCheck這裏看起來會讓編譯器混淆,沒有超載,同樣的名字,同樣的簽名。

,然後當窗體的方法是讓它會去的第一個,而如果爲形式的方法是POST,它會調用一個裝飾有[HttpPost]

而且由於使用的是提交按鈕,默認情況下HTML表單生成使用POST動作,它調用[HttpPost]

你可以參考這篇文章(從互聯網檔案的原始鏈接現在已經下降):https://web.archive.org/web/20120527133344/http://microsoftmentalist.com:80/2011/09/07/asp-net-mvc-difference-between-httpget-and-httppost-with-example/

見例如如何GETPOST操作方法s超載。

+0

問題是他沒有提交按鈕。 – Nik

2

您需要的按鈕是一個submit按鈕:

變化:

<input type="button" id="SaveChanges" value="Save" /> 
      ^^^^^^ 

收件人:

<input type="submit" id="SaveChanges" value="Save" /> 
      ^^^^^^ 
+0

謝謝。我最初嘗試着像你一樣提交,但沒有奏效。然後我去按鈕,然後在jquery把window.location.href。但我會再試一次。另外我用這個按鈕的方式是window.location.href去控制器/動作的唯一方法。我已經嘗試過。$ post之前,但它去控制器/操作,然後回到jQuery腳本 –

+0

location.href將發出一個GET,你不會得到任何你的表單數據。如果你想用javascript提交,你需要在表單上調用一個submit()方法。 – Nik

0

首先相同的簽名同名方法不能在同一個控制器中編譯它會給你編譯錯誤已經有相同參數類型的成員。

您必須通過不同的簽名來區分這兩個相似的名稱方法。

關於HttpPost和HttpGet,只要您需要回顧數據或爲該視圖調用頁面加載,就會調用get方法。

HttpPost方法將被調用,無論您使用的按鈕類型提交或您的輸入類型是按鈕,但使用jQuery你給按鈕點擊ajax調用,你的ajax類型是「發佈」 $。阿賈克斯({ url:「Action」 type:「Post」 },succees:function(){alert('succeed');});