2014-10-30 4 views
0

В приложении MVC я выполнил большую часть вызовов операций CRUD с использованием AJAX.HOw перенаправить страницу тайм-аута сессии, когда вызов AJAX

Проблема заключается в том, что когда сеанс получает тайм-аут, он не может перенаправить на страницу сеанса.

Ниже приведен код, который отлично работает при отсутствии вызова 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

Показать код для АЯКС вызова – ssilas777

+0

проверки это сообщение: HTTP : //stackoverflow.com/questions/26638368/asp-net-mvc-redirect-out-of-a-partial-view-from-controller-to-a-full-view-from-a –

+0

@EhsanSajjad Я использую нормальный lo gin - аутентификация в базе данных. поэтому атрибут [Авторизовать] нельзя обрабатывать или работать, как указано выше в ссылке stackoverflow. – dsi

ответ

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

+0

я не получил вас правильно, хотя отредактировал мой ответ для большей ясности. – ssilas777

+0

Я просто хочу спросить, когда мы вызываем действие с помощью вызова AJAX, хотя он работает, чтобы вызвать атрибут фильтра 'FilterAttribute' - onexecuting method? – dsi