我的jQueryAjax表单帖子有什么问题?

我的jQueryAjax表单帖子有什么问题?,jquery,ajax,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Jquery,Ajax,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,几乎完成了,只需要一点帮助就可以完成…我正在尝试将表单数据发布到“/Vendor/AdvocateCreate”,一旦保存,我希望对话框消失,并更新其后面的列表 它后面的列表是AdvocateList视图,并从同一控制器中的AdvocateList方法提取其数据 提倡创建方法 $("button[name='advocate-create-button']").on("click", function () { $.ajax({ url:

几乎完成了,只需要一点帮助就可以完成…我正在尝试将表单数据发布到“/Vendor/AdvocateCreate”,一旦保存,我希望对话框消失,并更新其后面的列表

它后面的列表是AdvocateList视图,并从同一控制器中的AdvocateList方法提取其数据

提倡创建方法

    $("button[name='advocate-create-button']").on("click", function () {
    $.ajax({            
        url: '/Vendor/AdvocateCreate',
        type: 'post',
        dataType: 'json',
        data: $('form#advocate-create-form').serialize(),
        success: function() {
            $(".modal_overlay").css("opacity", "0");
            $(".modal_container").css("display", "none");
        }    
    }).done(function (data) {
        var $target = $("#advocate-list-view");
        var $newHtml = $(data);
        $target.replaceWith(data);
        $newHtml.effect("highlight");
    });
    return false;
});
因此,表单标签是:

create方法会被调用,数据会被保存,但success:don not fire下的行以及#advoter列表视图中的数据不会被更新


谢谢

您的服务看起来应该返回html,您将其视为html,因此我假设它是html。您需要删除dataType选项,或者将其设置为html。由于html不是有效的json,jQuery触发的是错误处理程序,而不是成功

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult AdvocateCreate(Advocate advocate, int page = 1)
    {
        if (!ModelState.IsValid) return View(advocate);
        db.Advocates.Add(advocate);
        db.SaveChanges();

        var userId = WebSecurity.GetUserId(User.Identity.Name);

        var model = (from a in db.Advocates.ToList()
                     where a.VendorId == userId
                     select a).ToPagedList(page, 15);
        if (Request.IsAjaxRequest()) return PartialView("_AdvocateListPartial", model);
        return View(model);
    }

您从未实际使用过
$newHtml
,这是有意的吗?您是否从服务中返回json?它是有效的json吗?我的猜测是否定的,因为你把它当作html。(提示:删除数据类型:“json”,如果您的服务返回html数据)@KevinB ah…谢谢kevin,将json更改为html,现在可以完美工作+1+1@JBenjamin只是稍微扩展一下,您的操作返回一个
PartialView
,通常是html。如果您想返回json,您将返回一个
JsonResult
。@KevinB re:newHtml…试图使更新后的div区域闪烁或发生其他事情…这并不重要,但更新速度太快,我想以某种方式吸引用户注意,列表已更改为“不知道这里发生了什么”。。。我的印象是var$target设置新数据的放置位置,然后$target.replaceWith进行放置。(两行$newHtml使最新更新的div flash非常快,表明屏幕的一部分已经改变)您的印象是正确的,但是
$newHtml
实际上包含的dom元素集合与替换
$target
的dom元素集合完全不同,因为您在
替换为
中使用了
数据
,而不是
$newHtml
$("button[name='advocate-create-button']").on("click", function () {
    $.ajax({            
        url: '/Vendor/AdvocateCreate',
        type: 'post',
        /*dataType: 'json',*/
        data: $('#advocate-create-form').serialize(),
        success: function() {
            $(".modal_overlay").css("opacity", "0");
            $(".modal_container").css("display", "none");
        }    
    }).done(function (data) {
        var $target = $("#advocate-list-view");
        var $newHtml = $(data); // dunno what is 
        $target.replaceWith(data); // goin on here
        $newHtml.effect("highlight"); // or here
    });
    return false;
});