2014-01-09 59 views
1

好時,控制器讓我有這種形式,我認爲:表數據不被張貼使用AJAX

<form id="MyForm"> 
<input type="text" name="myinput" /> 
<button type="submit" /> 
</form> 

我有以下的Javascript在我看來的頂部,運行時的頁面加載:

<script type="text/javascript"> 
    $(document).ready(
     function() { 
      $("#MyForm").submit(
       function() { 
        var url = "Home/TestAjax"; 

        var dataToSend = $("#MyForm").serialize(); 
        alert(dataToSend); 

        $.ajax 
        (
         { 
          type: "POST", 
          url: url, 
          data: dataToSend, 
          success: function (data) { 
           alert(data); 
          } 
         } 
        ); 

        return false; 
       } 
      ); 
     } 
    ); 
</script> 

窗體被正確地序列化爲ajax,並通過警報框進行驗證。這裏是我的TestAjax控制器方法:

[HttpPost] 
public string TestAjax(string data) 
{ 
    return !string.IsNullOrEmpty(data) ? "Success" : "Failure"; 
} 

返回的值是失敗,因爲AJAX沒有被回發。我在這裏做錯了什麼?

感謝

+0

你的觀點是什麼模式? –

+0

目前沒有使用任何模型,試圖讓我的頭只是將表單序列化爲JSON,將其發佈到控制器並返回一個值。你需要使用模型嗎? – JMK

+0

此處顯示的警報alert(dataToSend); –

回答

6

你輸入字段的名稱是myinputdata。所以一定要確保你一直叫你行動的說法,以及:

[HttpPost] 
public ActionResult TestAjax(string myinput) 
{ 
    return !string.IsNullOrEmpty(myinput) ? Content("Success") : Content("Failure"); 
} 

當您使用$("#MyForm").serialize()這將返回myinput=some_value其中some_value顯然是用戶在此輸入字段中已輸入的值。

如果你有在你的表單2個輸入字段:

<form id="MyForm"> 
    <input type="text" name="foo" /> 
    <input type="text" name="bar" /> 
    <button type="submit" /> 
</form> 

你當然會寫一個視圖模型:

public class MyViewModel 
{ 
    public string Foo { get; set; } 
    public string Bar { get; set; } 
} 

您的控制器動作將作爲參數:

[HttpPost] 
public ActionResult TestAjax(MyViewModel model) 
{ 
    return !string.IsNullOrEmpty(model.Foo) ? Content("Success") : Content("Failure"); 
} 

另外請注意,在ASP.NET MVC控制器操作應該返回ActionResults,而不是stri或者其他什麼。

+0

Darin你再次抓到了;) –

+0

D'oh,我認爲整個表單將被序列化爲單個JSON字符串並作爲數據傳遞,非常感謝! – JMK

+2

我已經瀏覽了十次JS和C#代碼,並將HTML留在一邊,但有時候HTML是非常重要的,因爲其餘的... +1 – DontVoteMeDown