通过ajax提交部分视图

时间:2012-12-10 18:47:24

标签: jquery asp.net-mvc-4 partial-views

我有一个部分视图(表单),我在模式弹出窗口中显示。在提交时,它将创建一个新的数据库条目。这需要通过ajax调用来完成。如何传递ajax调用中的所有表单字段?我正在使用MVC4。

我尝试了$('form')。serialize(),但是这会导致错误无效的JSON原语。我做错了什么?

var dataToSend = $('form').serialize();
    $.ajax({
        url: urlForSaving,
        data: dataToSend,
        cache: false,
        type: 'POST',
        dataType: 'json',
        contentType: "application/json;charset=utf-8",
        success: function (data, status) {
        },
        error: function (xhr, ajaxOptions, thrownError) { alert('error') }
    });

控制器

 [HttpPost]
    public JsonResult Add(SomeModel model)
    {
        if (ModelState.IsValid)
        {
            RedirectToAction("Index");
        }

        return Json(new { 
        Success = false,
        Message = "Validation Errors"
        });
    }

2 个答案:

答案 0 :(得分:1)

您应该将字段值添加到对象中,然后将该对象传递给将在您所需的事件中调用的函数。

 var dataToSend = {
                    fieldname: $("FIELDCLASS OR ID").val();
                  };

  function tocall(){
       $.ajax({
                 url: urlForSaving,
                 data: JSON.stringify(obj:dataToSend),
                 cache: false,
                 type: 'POST',
                 dataType: 'json',
                 contentType: "application/json;charset=utf-8",
                 success: function (data, status) {
             },
                 error: function (xhr, ajaxOptions, thrownError) { alert('error') }
             });
                   };

答案 1 :(得分:1)

从MVC3起,我认为在局部视图中使用Ajax.BeginForm是理想的情况(与Http.BeginForm相关)。 Ajax版本会自动连接所有内容,包括通过ajax发布的表单。

MSDN Ajax.BeginForm