Ajax调用控制器操作结果返回错误消息

时间:2014-02-12 19:56:11

标签: jquery asp.net-mvc asp.net-mvc-4

我正在对名为Estatement的ActionResult方法进行Ajax调用。 这就是我想要发生的事情

  1. 如果checkUser = false,则应该重定向到视图

  2. 如果checkuser不是false,我想返回Done为成功并拥有我的ajax 代码做了一些事情。

  3. 现在我无法重定向到语句视图,我得到的是来自错误消息的警报(尝试处理时出错)

    您认为此代码有什么问题?

        <div class="eStmnt">
            <div class="eStmntAd">
                <h3>Go Green!</h3>       
            </div>
    
            <p class="eStmntAffirm hide">Testing Testing</p>
        </div>
    
    
        <script type="text/javascript">
            $(".eStmnt").click(function() {
    
                $.ajax({
                    type: "POST",
                    url: '@Url.Action("Estatement","MyController")',
                    dataType: "json",
                    success:function(result) {               
                        if (result == "Done") {
                            $(".eStmntAffirm").removeClass("hide").addClass("show");
                        }                   
                    },
                    error: function() {
                        alert('An error occured while trying to process this');
                    }
                });
    
            });
    
        </script>
    
    
         public ActionResult  Estatement()
                {
    
                    bool checkUser = false;
                    string result = string.Empty;
    
                    if (checkUser == false)
                    {
                        return RedirectToAction("Statement","MyProducts");       
                    }
    
                    result = "Done";
    
                    return Json(result);
    
                }
    

3 个答案:

答案 0 :(得分:1)

由于Ajax期待JSON,您的方法将无效。但是你可以试试这个

Ajax成功回调函数

success:function(data) {               
    //Do something when result is done
    if (data.status == "error" && data.redirectionUrl != "") {
        window.location.replace(data.redirectionUrl)
    }
    //Do something when result is done
    if (data.status == "success" && data.result == "Done") {
        $(".eStmntAffirm").removeClass("hide").addClass("show");
    }                   
},

控制器

public ActionResult  Estatement()
{       
    bool checkUser = false;
    string result = string.Empty;

    if (checkUser == false)
    {
        UrlHelper urlHelper = new UrlHelper(this.ControllerContext.RequestContext);
        return Json(new {
            status = "success"
            redirectionUrl = urlHelper.Action("Statement","MyProducts")
        });
    }

    return Json(new {
        status = "success"
        result = "Done"
    });   
}

答案 1 :(得分:0)

您的控制器需要返回JsonResult而不是ActionResult

Ex:http://geekswithblogs.net/michelotti/archive/2008/06/28/mvc-json---jsonresult-and-jquery.aspx

答案 2 :(得分:0)

你正在遵循一个错误的方法......处理这个需要你需要遵循这个过程......

首先将您的ajax调用类型更改为“获取”,或者如果是post,则更改您的操作方法,如下所示:

1.将Ajax类型更改为Post。

             [HttpPost]
             public ActionResult  Estatement()
               {

                bool checkUser = false;
                string result = string.Empty;
                 result = "Done";
                if (checkUser == false)
                {
                    result ="False";  
                }


                return Json(result,JsonAllowBehaviour.AllowGet);

            }

然后在你的ajax调用的成功方法中写下这个:

    <script type="text/javascript">
    $(".eStmnt").click(function() {

        $.ajax({
            type: "POST",
            url: '@Url.Action("Estatement","MyController")',
            dataType: "json",
            success:function(result) {               
                if (result == "Done") {
                    $(".eStmntAffirm").removeClass("hide").addClass("show");
                }   
         // Condtion for redirect...
                  else
                 {
                 window.location='@Url.Action("Statement","MyProducts")';
                 }                 
            },
            error: function() {
                alert('An error occured while trying to process this');
            }
        });

    });