Javascript 开始表单并重新加载PartialView
我有一种情况,我使用Ajax.BeginForm()将一些数据(注释表单)发布到控制器方法。然后,此控制器方法使用实体框架将一些信息写入数据库(只要ModelState有效) 作为表单的一部分,我使用onSuces重载在表单发布后执行javascript函数。此函数基本上调用另一个控制器方法(返回部分视图,在本例中为注释列表) 我的问题是,新添加的注释没有包含在从控制器操作返回的视图中,尽管我知道它存在于数据库中 这就引出了两种可能的选择:Javascript 开始表单并重新加载PartialView,javascript,jquery,asp.net-mvc-3,ajax.beginform,Javascript,Jquery,Asp.net Mvc 3,Ajax.beginform,我有一种情况,我使用Ajax.BeginForm()将一些数据(注释表单)发布到控制器方法。然后,此控制器方法使用实体框架将一些信息写入数据库(只要ModelState有效) 作为表单的一部分,我使用onSuces重载在表单发布后执行javascript函数。此函数基本上调用另一个控制器方法(返回部分视图,在本例中为注释列表) 我的问题是,新添加的注释没有包含在从控制器操作返回的视图中,尽管我知道它存在于数据库中 这就引出了两种可能的选择: 在控制器方法实际返回之前,正在执行htmlhelper
@using (Ajax.BeginForm("CreateComment", "Home", new AjaxOptions { HttpMethod = "POST", OnSuccess = "something" })){
...
}
我的控制器动作定义为(为清楚起见,省略细节):
甚至使用setTimeout延迟对reloadBlogComments()的调用(函数(){reloadBlogComments();},3000)代码>未获得一致的值
我哪里出错了?好的,问题很简单:
$.ajax({
cache:false,
...
});
function something(data) {
switch (data.result) {
case 0:
// Sucess
// Get the Alert
var message = "<strong>Thank You</strong> Your comment has been posted.";
var myAlert = jQuery("#donemessage");
myAlert.html(message);
reloadBlogComments();
break;
case -1:
var errorMessages = data.message.split(',');
var html = "<strong>The following errors were detected:</strong><br/>";
var length = errorMessages.length, element = null;
for (var i = 0; i < length; i++) {
element = errorMessages[i];
// Do something with element i.
html += element + "<br/>";
}
var myErrorAlert = jQuery("#failmessage");
myErrorAlert.html(html);
myErrorAlert.show(500).css("visibility", "visible");
break;
default:
alert(data.message);
break;
}
}
function reloadBlogComments() {
jQuery.ajax({
// edit to add steve's suggestion.
//url: "/ControllerName/ActionName",
url: '@Url.Action("RenderBlogComments", "Home")',
data: { 'BlogID': '@Model.BlogID' },
success: function (newdata) {
jQuery("#upComments").empty().html(newdata);
},
statusCode: {
404: function (content) { alert('cannot find resource'); },
505: function (content) { alert('internal server error'); }
},
error: function (req, status, errorObj) {
// handle status === "timeout"
// handle other errors
}
});
var myAlert = jQuery("#donemessage");
var myErrorAlert = jQuery("#failmessage");
myErrorAlert.hide(500).css("visibility", "hidden");
myAlert.show(500).css("visibility", "visible");
// Clear the form
jQuery('#CommenterName').val('');
jQuery('#CommenterEmail').val('');
jQuery('#CommentContent').val('');
window.location.hash = '#comments';
}
$.ajax({
cache:false,
...
});