MVC使用ajax发送Model

时间:2015-09-30 14:49:24

标签: javascript ajax model-view-controller

尝试使用ajax将数据发送回我的save方法时遇到问题。我想这样做,因为我通过使用相同的保存功能将其渲染为部分页面,在多个屏幕中重复使用该表单。

我遇到的问题是当我这样做它确实有效并将其发送回我的保存功能,但序列化的Json是在页面加载时生成的,并且没有获得更新的值。我想获取使用ajax发回的更新值,理想情况下无需捕获页面上每个字段的值。

以下是我现在使用的代码,它可以使用模型中列出的原始值发送回我的保存方法

$("#Save").click(function () {
    var form = $('#Form');

    if (form.valid()) {
        var data = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(@Model))';

        $.ajax({
            url: "/Save",
            type: 'POST',
            data: JSON.stringify({ modelJson: data }),
            contentType: 'application/json',
            success: function (result) {
                SaveFade();
            }
        });
    }

    return false;
});

1 个答案:

答案 0 :(得分:0)

首先,请使用延迟的.done.fail.always方法,jQuery的$.ajax方法返回而不是success。 其次,不要直接在JavaScript中使用Razor方法,因为单引号字符'可能会导致语法错误。而是使用id关闭隐藏div中的此数据,例如: <div id="formData">@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(@Model))</div>,然后在JavaScript中执行:var data = $('#formData').html();。这样,您还可以将脚本移动到单独的.js文件中。

回答您的问题,您必须使用ajax将实际表单发送到控制器方法。关闭表单中的所有字段,为表单@using(Html.BeginForm("Method", "Controller", FormMethod.Post, new { id = "myForm" }))分配id,并使用AJAX发送它:

    $("#Save").click(function () {
        var form = $('#Form');

        if (form.valid()) {
            var data = form.serialize();

            $.ajax({
                url: "/Save", //you can get also action attribute from form using form.attr('action')
                type: 'POST',
                data: data
            }).done(function (result) {
                SaveFade();
            });
         }

         return false;
     });

关于ASP.NET MVC中表单的好教程:http://blog.michaelckennedy.net/2012/01/20/building-asp-net-mvc-forms-with-razor/