Ajax将null Json对象发布到mvc 4控制器

时间:2013-02-04 09:39:05

标签: jquery ajax asp.net-mvc-4

Jquery ajax post请求将null json对象发布到mvc控制器。 知道为什么会这样吗?

干杯

这是我的模特

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;
}

2 个答案:

答案 0 :(得分:5)

如果使用strong-typed-helper,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

答案 1 :(得分:0)

只需添加:

return false;

在提交功能结束时。