2014-10-30 77 views
0

在MVC应用程序中,我使用AJAX调用了大部分CRUD操作。在AJAX调用时重定向sessiont超时页面

问题是,当会话超时然后,它无法重定向到会话超时页面。

下面是没有AJAX调用时工作正常的相关代码。

[AttributeUsage(AttributeTargets.Class)] //| AttributeTargets.Method 
public class ControllerLogAndAccessFilter : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
      \\check if session is null then redirect to session time out page. 
    } 
} 

对于登录,我只是检查databsae,没有为memebrship提供商。

 [HttpPost] 
     public JsonResult Login(string username, string password, bool RememberMe) 
    { 
     try 
     { 
     UserDTO accDTO = new UserDTO() 
      { 
       UsernAme = username, 
       Password = DataEncryption.EncryptPassword(password) 
      }; 

      UserDTO AccDTO = _iAccount.UserAuthentication(accDTO); 

      if (AccDTO != null) 
      { 
       Session["UserId"] = 1; 
       Session["userdto_Session"] = AccDTO; 
       // Remember me 
       HttpCookie myCookie = new HttpCookie("appCookie"); 
       //chkRememberMe.Checked; 
       if (RememberMe) 
       { 
        myCookie.Values.Add("username", username); 
        myCookie.Values.Add("password", password); 
        myCookie.Expires = DateTime.Now.AddMinutes(20); 
       } 
       else 
       { 
        myCookie.Values.Add("username", string.Empty); 
        myCookie.Values.Add("password", string.Empty); 
        myCookie.Expires = DateTime.Now.AddMinutes(5); 
       } 
       Response.Cookies.Add(myCookie); 
       // Remember me 

       return Json(AccDTO.SID, JsonRequestBehavior.AllowGet); 
      } 
      else 
      { 
       return Json(null); 
      } 
     } 
     catch (Exception ex) 
     { 

     } 
     return null; 
    } 

Ajax调用用于登录,所有的CRUD操作使用$.AJAX({...});制成。

+0

显示了AJAX调用 – ssilas777 2014-10-30 04:46:23

+0

检查这个职位代码:HTTP ://sackoverflow.com/questions/26638368/asp-net-mvc-redirect-out-of-a-partial-view-from-controller-to-a-full-view-from-a – 2014-10-30 05:43:10

+0

@EhsanSajjad我正在使用正常的杜松子酒 - 数据库验证。所以,[Authorize]属性不能像上面提到的stackoverflow链接那样处理或工作。 – dsi 2014-10-30 06:03:24

回答

0

Ajax请求应在客户端本身进行处理,试试这个

属性:

[AttributeUsage(AttributeTargets.Class)] //| AttributeTargets.Method 
public class ControllerLogAndAccessFilter : FilterAttribute, IActionFilter 
{  
    public void OnActionExecuting(ActionExecutingContext filterContext) 
     { 

      //TO HANDLE AJAX REQUESTS 
      if (filterContext.HttpContext.Request.IsAjaxRequest()) 
      { 
       //If session is null 
       filterContext.Result = new JsonResult 
       { 
        Data = new 
        { 
         // put a message which sentto the client 
         message = "Session Time out" 
        }, 
        JsonRequestBehavior = JsonRequestBehavior.AllowGet 
       }; 
      }else{ 
        // 
      } 
     } 
    } 

在JavaScript

$.ajax(function(){ 
    url:"", 
    success: function (result) {    
       if(result.message == "Session Time out"){ 
       //Session timed out handle it 
       //window.location.href = session timeout url 
       } 
      }, 

}); 
+0

下面的代码会调用何时调用ajax? '[AttributeUsage(AttributeTargets.Class)] // | AttributeTargets.Method 公共类ControllerLogAndAccessFilter:FilterAttribute,IActionFilter { 公共无效OnActionExecuting(ActionExecutingContext filterContext) {' – dsi 2014-10-30 05:21:38

+0

我没有得到你正确的,虽然编辑我的回答更加清晰。 – ssilas777 2014-10-30 05:48:04

+0

我只想问,当我们使用AJAX调用调用动作时,尽管它可以调用过滤器属性'FilterAttribute' - onexecuting方法? – dsi 2014-10-30 06:05:37