2013-02-21 116 views
6

सब, मैं सत्र समय पर AJAX कॉल करते समय लॉगिन पृष्ठ पर रीडायरेक्ट करने का प्रयास कर रहा हूं। यहां तक ​​कि मैंने अभी तक किया है।सत्र समय समाप्त होने पर अजाक्स कॉल

सभी कार्यों के लिए एक एक्शन फ़िल्टर परिभाषित करें।

public class AuthenticateFilterAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      base.OnActionExecuting(filterContext); 
      var routeDataSet = filterContext.RouteData; 
      if (LoginUser.LoginAdministrator == null) 
      { 
       //if the useinfo stored in session is timeout. 
       if (routeDataSet != null 
        && routeDataSet.Values["controller"] != null 
        && routeDataSet.Values["controller"].ToString().ToLower().Equals("login") 
        && routeDataSet.Values["action"] != null 
        && routeDataSet.Values["action"].ToString().ToLower().Equals("login")) 
       { 
        //if it is login action itself.let it be. don't do anything. 


       } 
       else 
       { 
        //redirect to login page. 
        filterContext.Result = new RedirectToRouteResult(
         new RouteValueDictionary { { "controller", "Login" }, { "action", "Login" } }); 
       } 
      } 
     } 
    } 

यह सत्र समय समाप्त होने पर गैर AJAX कार्रवाई कॉल के लिए काम करता है। लेकिन AJAX कॉल के लिए। यह लॉगिन पृष्ठ पर रीडायरेक्ट नहीं कर सकता है, लेकिन केवल एक HTML पृष्ठ स्ट्रिंग लौटाता है (ऐसा लगता है कि यह लॉगिन पृष्ठ के लिए स्रोत HTML कोड है), वास्तव में परिणाम नहीं। कहें कि हमारे पास कोड है।

function ajaxGetLogDetail(logId) { 
     var sUrl = "/LogDetail/index?logId=" + logId; 
     $.ajax({ 
      cache: false, 
      type: "GET", 
      async: false, 
      url: sUrl, 
      success: function (result) { 
       //please note result is html string. not the really result. 
      }, 
      error: function (xhr) { 
       alert(xhr.responseText); 
      } 
     }); 
    } 

क्या कोई मुझे इस मुद्दे को हल करने के लिए कुछ सुराग देने में मदद कर सकता है? धन्यवाद।

अपडेट किया गया

मोहसिन और डेव के जवाब के आधार पर (धन्यवाद आप दो), यहाँ अंत में समाधान है। कृपया इसकी समीक्षा करें। धन्यवाद।

public class AuthenticateFilterAttribute : ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      base.OnActionExecuting(filterContext); 
      var routeDataSet = filterContext.RouteData; 
      if (LoginUser.LoginAdministrator == null) 
      { 

       //&& routeDataSet != null && routeDataSet.Values["controller"] != null 
       //&& !routeDataSet.Values["controller"].ToString().ToLower().Equals("login") && routeDataSet.Values["action"] != null 
       //&& !routeDataSet.Values["action"].ToString().ToLower().Equals("login") && !filterContext.HttpContext.Request.HttpMethod.ToLower().Equals("get")) 
       if (routeDataSet != null 
        && routeDataSet.Values["controller"] != null 
        && routeDataSet.Values["controller"].ToString().ToLower().Equals("login") 
        && routeDataSet.Values["action"] != null 
        && routeDataSet.Values["action"].ToString().ToLower().Equals("login")) 
       { 



       } 
       else 
       { 
        if (filterContext.HttpContext.Request.IsAjaxRequest()) 
        { 
         filterContext.Result = new JsonResult 
         { 
          Data = new 
          { 
           ErrorMessage = "SystemSessionTimeOut" 
          }, 
          JsonRequestBehavior = JsonRequestBehavior.AllowGet 
         }; 
        } 
        else 
        { 
         filterContext.Result = new RedirectToRouteResult(
          new RouteValueDictionary { { "controller", "Login" }, { "action", "Login" } }); 
        } 
       } 
      } 
     } 
    } 

ग्राहक के पक्ष में:

function ajaxGetLogDetail(logId) { 
     var sUrl = "/LogDetail/index?logId=" + logId; 
     $.ajax({ 
      cache: false, 
      type: "GET", 
      async: false, 
      url: sUrl, 
      success: function (result) { 
       if (result.ErrorMessage=="SystemSessionTimeOut") 
       { 
        windows.location="/Login/Login"; 
       } 
       else 
       { 
        //... 
       } 
      }, 
      error: function (xhr) { 
       alert(xhr.responseText); 
      } 
     }); 
    } 
+1

क्या आप उपरोक्त फ़िल्टर से रीडायरेक्ट होने के बाद अपने दृश्य में IsAjaxRequest का उपयोग कर अनुरोध प्रकार की जांच कर सकते हैं और तदनुसार –

+0

अच्छा विचार, क्या आपका मतलब 'f ilterContext.HttpContext.Request.IsAjaxRequest'? धन्यवाद। –

+0

हाय, मोहसिन, डेव ने मुझे और विस्तार दिया। इसलिए, इसे बनाने का एकमात्र तरीका क्लाइंट साइड रीडायरेक्ट करना है। मुझे लगता है कि यह आपके मतलब का हिस्सा है। –

उत्तर

7

अजाक्स कॉल किसी भी तरह के एक रीडायरेक्ट नहीं लौट सकते। कोर पर एक AJAX कॉल केवल एक स्ट्रिंग देता है। इस प्रकार का कोई इंजन नहीं है जो रीडायरेक्ट करेगा।

हालांकि आप क्लाइंट साइड रीडायरेक्ट कर सकते हैं।

 if !(routeDataSet != null 
     && routeDataSet.Values["controller"] != null 
     && routeDataSet.Values["controller"].ToString().ToLower().Equals("login") 
     && routeDataSet.Values["action"] != null 
     && routeDataSet.Values["action"].ToString().ToLower().Equals("login")) 
     { 
     return Json(new { success = false, message = errorMessage }); 
     } 

आपके AJAX error समारोह में:

 error: function (xhr) { 
      alert(xhr.responseText); 
      window.location='/Login/Login'; 
     } 

साइड नोट: अपने गंतव्य होना चाहिए था '/ सत्र का समय समाप्त हो गया है और ग्राहक के पक्ष अपने नियंत्रक विधि वापसी झूठी है लॉगिन/लॉगिन 'या'/खाता/लॉगिन '

+0

धन्यवाद, डेव, आप और मोहसिन अख्तर दोनों का अच्छा जवाब है। –

+0

हाय, डेव, क्या आप कृपया मेरी अपडेट की गई सामग्री की समीक्षा कर सकते हैं। धन्यवाद। –