2016-07-20 4 views
4

Есть ли простой способ перенаправить всю страницу (а не только частичное представление) на страницу входа после истечения срока действия сеанса?Перенаправить частичный просмотр страницы входа в систему по окончании сеанса

Я попытался следующие решения, но не может заставить его работать:

Моя проблема заключается в том, что частичное перенаправляет на Login-странице , а не всю страницу (та же проблема, что и в ссылках).

Контроллер

 [HttpPost] 
     public PartialViewResult LogPartialView(string a, int? b, string c, string d, int? e, string f) 
     { 
      //If the user is "Admin" -> display Logs for all customers. 
      if (Roles.IsUserInRole(WebSecurity.CurrentUserName, "Admin")) 
      { 
       if (Session["myID"] == null) 
       { 
        ExpireSession(); 
       } 
      //Some code 

     return PartialView("LogPartialLayout", model); 
     } 

Я хотел вернуться редирект («~ /»), если MyId является недействительным, но он не работает, так как он ожидает частичный вид.

сообщения об ошибке: Не удается неявно преобразовать тип 'System.Web.Mvc.RedirectResult' до '' System.Web.Mvc.PartialViewResult

public void ExpireSession() 
    { 
     Session.Abandon(); 
     WebSecurity.Logout(); 
     Response.Redirect("~/"); 

    } 

Picture of the view

+0

Изменить подпись вашего метода на: 'public ActionResult LogPartialView (...)' – haim770

+0

@ haim770 Я добавил, если session = null -> Redirect ("~ /") Но он по-прежнему перенаправляется внутри частичного представления. –

+0

@ haim770 .. Я забыл упомянуть, что я перешел на публичный ActionResult, но без успеха. Все еще перенаправляет внутри PartialView. –

ответ

2

Я собираюсь построить на ответ @EmilChirambattu сек.

[HttpPost] 
public ActionResult LogPartialView(string a, int? b, string c, string d, int? e, string f) 
{ 
    // You should check the session before anything else. 
    if (Session["myID"] == null) 
    { 
     return ExpireSession(); 
    } 

    //If the user is "Admin" -> display Logs for all customers. 
    if (Roles.IsUserInRole(WebSecurity.CurrentUserName, "Admin")) 
    { 
     //Some code 
    } 

    return PartialView("LogPartialLayout", model); 
} 

public void ExpireSession() 
{ 
    Session.Abandon(); 
    WebSecurity.Logout(); 
    Response.Redirect("RedirectToLogin"); 
} 

public ActionResult RedirectToLogin() 
{ 
    return PartialView("_RedirectToLogin"); 
} 

_RedirectToLogin Посмотреть

<script> 
    window.location = '@Url.Action("Index", "")'; 
</script> 

Это должно перенаправить вас к базовому URL страницы (скорее всего, ваш Логин-страницы).

2

Web Config

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/RedirectToLogin" timeout="2880" /> 
</authentication> 

Контролер счета

public ActionResult RedirectToLogin() 
{ 
    return PartialView("_RedirectToLogin"); 
} 

_RedirectToLogin Посмотреть

<script> 
    window.location = '@Url.Action("Login", "Account")'; 
</script> 

что-то подобное, изменить URL, соответственно

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