0
    $("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;
});

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

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

AdvocateCreate 方法

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

因此,表单标签是:<form class="form" id="advocate-create-form">

确实调用了 create 方法,确实保存了数据,但是成功下的行:不要触发并且#advocate-list-view 中的数据未更新

谢谢

4

1 回答 1

1

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

$("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;
});
于 2013-08-19T19:39:04.043 回答