2013-02-04 137 views
4

Jquery ajax發佈請求將null json對象發佈到mvc控制器。 任何想法,爲什麼這可能是?Ajax發佈null Json對象到mvc 4控制器

乾杯

這裏是我的模型

public class CommentModel 
    { 
     public string EmailAddress { get; set; } 
     public string Name { get; set; } 
     public int ActivityId { get; set; } 
     public string CommentText { get; set; } 

    } 

控制器

[HttpPost] 
     public ActionResult Index(CommentModel commentModel) 
     { 

      int i = commentModel.ActivityId; 
      string k = commentModel.CommentText; 

      return View(); 
     } 

JQuery的

$("#CommentForm").submit(function() { 

     var formDataAsJson = GetFormDataAsJson(); 

     $.ajax({ 
      url: $(this).attr("action"), 
      dataType: 'json', 
      type: "POST", 
      data: JSON.stringify({ commentModel: formDataAsJson }), 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       $("#commentsection").append(data); 
      } 
     }) 
    }); 

function GetFormDataAsJson() { 

    var emailInput = $("#InputEmailAddress").attr("value"); 
    var name = $("#InputName").attr("value"); 
    var comment = $("#some-textarea").attr("value"); 
    var activityid = parseInt($("#ActivityID").attr("value")); 

    var formObject = { 
     EmailAddress: emailInput, 
     Name: name, 
     ActivityId: activityid, 
     CommentText:comment 
    } 

    return formObject; 
} 
+0

爲什麼不使用'data:$('#formId')。serialize()'?或'數據:JSON.stringify(formDataAsJson),' –

+0

嗨。試圖學習json我認爲這個練習將是一個好的開始。但似乎需要很長時間。 –

+0

當你在你的視圖中使用強類型助手時,你直接發佈你的表單到ajax數據中,比如:'data:$('#formId')。serialize()' –

回答

5

如果你使用強類型的輔助,MVC轉換爲你模型。你不需要創建js模型。

強類型的視圖

@model CommentModel 
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { id = "form1" })) 
{ 
    @Html.TextBoxFor(x => x.EmailAddress) 
    @Html.TextBoxFor(x => x.Name) 
    ... 
} 

腳本

$(function() { 
    $('form').submit(function() { 
     if ($(this).valid()) { 
      $.ajax({ 
       url: this.action, 
       type: this.method, 
       data: $(this).serialize(), 
       beforeSend: function() { 

       }, 
       complete: function() { 

       }, 
       success: function (result) { 

       }, 
       error: function() { 

       } 
      }); 
     } 
     return false; 
    }); 
}); 

控制器

[HttpPost] 
public ActionResult Index(CommentModel commentModel) 
{ 
    int i = commentModel.ActivityId; 
    string k = commentModel.CommentText; 

    return View(); 
} 

SameQuestion And Another Suggestion

+0

遵循你的方法。謝謝:) –

+0

在@ user1770924的評論後,我添加了一個鏈接,也檢查了這一點。 –

0

只需添加:

return false;

在您提交函數結束時。

相關問題