3

Мы создали сайт, используя MVC где у меня есть 3 контроллеры:Показать всплывающее окно с ActionFilter, если сессия истекает в MVC

AccountController 
HomeController 
ContactController 

Мы написали на заказ Авторизация в ActionFilters, где мы проверяем, истек ли срок действия сеанса или нет. Если сеанс истекает, мы перенаправляемся на страницу входа. Это код в ActionFilter:

public override void OnAuthorization(AuthorizationContext filterContext) 
     { 
      var user = filterContext.HttpContext.User; 
      var UserProcesses = HttpContext.Current.Session["UserProcesses"] != null ? ((List<string>)HttpContext.Current.Session["UserProcesses"]) : null; 
      var currentRequest = filterContext.ActionDescriptor.ActionName.ToLower(); 
      var currentController = filterContext.RouteData.Values["controller"].ToString(); 
      if (!string.IsNullOrEmpty(currentController)) 
      { 
       switch (currentController.ToLower()) 
       { 
        case "home": 
         { 
          if (UserProcesses == null) 
          { 
           filterContext.Result = new RedirectToRouteResult(
             new RouteValueDictionary(
              new 
              { 
               Controller = "Account", 
               Action = "Login" 
              }) 
             ); 
          } 
       break; 
     case "contact": 
         { 

          if (UserProcesses == null) 
          { 
       filterContext.Result = new RedirectToRouteResult(
             new RouteValueDictionary(
              new 
              { 
               Controller = "Account", 
               Action = "Login" 
              }) 
             ); 
          } 
       break; 

      } 
     } 
    } 

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

http://websitename/Account/Login 

Но теперь мы хотим отобразить всплывающее окно на странице (на любой странице, на которой находится пользователь), которая покажет сообщение «Этот сеанс истек», и после отклонения этого всплывающего окна пользователь затем перенаправляется на страницу входа.

Я не могу понять, как вызвать всплывающее окно JQuery из самого ActionFilter. Я искал множество решений в Интернете, но не смог найти правильное решение. Кто-то предложил использовать HandleUnauthorizedRequest для вызова метода действия (Call RedirectToAction from ActionFilter). Однако я смущен, следует ли использовать только HandleUnauthorizedRequest или использовать оба этих и OnAuthorization в моем коде. Может кто-нибудь предложить решение?

Примечание: У меня есть общий вид, в котором я могу сохранить html для всплывающего окна для использования на веб-сайте.

+0

Я думаю, что этот пост решает проблему: http://stackoverflow.com/questions/2174713/asp-net-mvc-authorize-attribute-to-launch-a-modal –

+0

@MariusB ДА !!! Это решает мою проблему :) Большое спасибо. Можете ли вы написать это как ответ, чтобы я мог принять его? – nitinvertigo

+0

Я рад, что он решил вашу проблему. :) –

ответ

2

Я думал о решении, которое использует переменную, и в зависимости от этой переменной вы бы показывали или не всплывали. я был слишком ленив, чтобы на самом деле писать код, но я обнаружил ссылку, которая описывает решение:

ASP.NET MVC Authorize Attribute to launch a modal?

1

Там есть еще один способ решить это то Просто зайдите в файл _Layout.cshtml и поставить код ниже:

<script type="text/javascript"> 
    jQuery(document).ready(function() {   

     var SessionValue = '@Request.RequestContext.HttpContext.Session["YourSessionKey"]'; 


     if (SessionValue == "") { 
      alert("your session is expired please try to Re-login"); 
      javascript: document.getElementById('logoutForm').submit(); 
     } 
    }); 
</script> 

где logoutForm это идентификатор формы выхода из системы в _Layout.cshtml.

 Смежные вопросы

  • Нет связанных вопросов^_^