Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 开始表单并重新加载PartialView_Javascript_Jquery_Asp.net Mvc 3_Ajax.beginform - Fatal编程技术网

Javascript 开始表单并重新加载PartialView

Javascript 开始表单并重新加载PartialView,javascript,jquery,asp.net-mvc-3,ajax.beginform,Javascript,Jquery,Asp.net Mvc 3,Ajax.beginform,我有一种情况,我使用Ajax.BeginForm()将一些数据(注释表单)发布到控制器方法。然后,此控制器方法使用实体框架将一些信息写入数据库(只要ModelState有效) 作为表单的一部分,我使用onSuces重载在表单发布后执行javascript函数。此函数基本上调用另一个控制器方法(返回部分视图,在本例中为注释列表) 我的问题是,新添加的注释没有包含在从控制器操作返回的视图中,尽管我知道它存在于数据库中 这就引出了两种可能的选择: 在控制器方法实际返回之前,正在执行htmlhelper

我有一种情况,我使用Ajax.BeginForm()将一些数据(注释表单)发布到控制器方法。然后,此控制器方法使用实体框架将一些信息写入数据库(只要ModelState有效)

作为表单的一部分,我使用onSuces重载在表单发布后执行javascript函数。此函数基本上调用另一个控制器方法(返回部分视图,在本例中为注释列表)

我的问题是,新添加的注释没有包含在从控制器操作返回的视图中,尽管我知道它存在于数据库中

这就引出了两种可能的选择:

  • 在控制器方法实际返回之前,正在执行htmlhelper形式的onSuces()函数
  • 实体框架正在更改数据
  • 在第2个例子中,我不知道entity framework是否缓存过数据,除非明确要求这样做。所以我假设是1

    因此,在进一步调查之后,我修改了onsuces方法和控制器操作

    我的表格定义如下:

    @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,
     ...
    });