2017-09-18 93 views
-1
public static CustomerInfo Customer 
{ 
    get 
    { 
     if (System.Web.HttpContext.Current.Session["CustomerData"] == null) 
     {      
      System.Web.HttpContext.Current.Response.Redirect("~/Account/Login"); 
      return new CustomerInfo(); 
     } 
     else 
     { 
      return (CustomerInfo)System.Web.HttpContext.Current.Session["CustomerData"]; 
     } 
    } 
    set 
    { 
     System.Web.HttpContext.Current.Session["CustomerData"] = value; 
    } 
} 

每当HttpContext.Current.Session["CustomerData"]null,而不是重定向到登录鉴于账户控制器它给例外。MVC5路由编程C#

+5

一个属性的getter与副作用是一个坏主意。 – Amy

+0

使用[action filter](https://www.codeproject.com/Articles/1095295/Check-Session-Timeout-by-Using-ActionFilters-in-MV)检查会话并重定向。 –

+0

感谢史蒂夫建议使用操作过滤器,但是可以将它重定向到getter的登录视图。 – Madhurima

回答

-1

尝试:

if (System.Web.HttpContext.Current.Session["CustomerData"] == null) 
    {      
     Session["CustomerLogin"] = "True"; 
     return new CustomerInfo(); 
    } 
    else 
    { 
     Session["CustomerLogin"] = "False"; 
     return (CustomerInfo)System.Web.HttpContext.Current.Session["CustomerData"]; 
    } 

然后在你的控制器检查:

if(Convert.ToString(Session["CustomerLogin"]) == "True"){ 
    return RedirectToAction("Login", "Account"); 
} 
+0

不能在他的实现中做到这一点 - 他试图在他的静态类的getter中做到这一点 - 它返回'CustomerInfo' – Alex

+0

哦,是的,你是对的。那么他需要检查什么CustomerInfo返回并相应地重定向。 – Laiman

+0

嗨莱曼感谢您的回复。但是这个公共的静态方法是在公共类CustomerInformation中,它给出了RedirectToAction在当前上下文中不存在的例外 – Madhurima

0

您可以使用

Return RedirectToAction("Login", "Account"); 

重定向到另一个控制器和控制方法

+0

你不能这样做。这是我首先想到的,但他试图在他的静态类的getter中完成此操作 - 它返回CustomerInfo() – Laiman