2014-02-12 32 views
1

我正在调用一个名为Estatement的ActionResult方法的Ajax调用。 以下是我希望发生对控制器操作结果的Ajax调用返回错误消息

  1. 如果checkUser =假,应该有一个重定向到一个视图

  2. 如果checkuser不假我想回到一个完成的成功,有我的AJAX代码做一些事情。

现在我无法重定向到声明视图和我得到的是从错误消息的警报(错误发生在尝试处理此)

你觉得是不对的码?

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

      } 

回答

1

由于阿贾克斯期待一个JSON,你的做法是行不通的。不过你可以试试这个,而不是

阿贾克斯成功回调函数

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

您正在关注一种错误的做法......来处理这个reqirent您需要遵循此过程...

首先将您的ajax呼叫类型更改为“获取”或者如果它发布后,则更改您的操作方法如下:

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

    }); 

相关问题