我的jQueryAjax表单帖子有什么问题?
几乎完成了,只需要一点帮助就可以完成…我正在尝试将表单数据发布到“/Vendor/AdvocateCreate”,一旦保存,我希望对话框消失,并更新其后面的列表 它后面的列表是AdvocateList视图,并从同一控制器中的AdvocateList方法提取其数据 提倡创建方法我的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:
$("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;
});