公共字段对控制器中的某些用户有不同的值吗?

时间:2015-01-04 10:04:55

标签: c# asp.net asp.net-mvc

我有三个操作方法和公共字段public int idUser:

public class HomeController : Controller
{   
    //public field 
    public int idUser = 0; 

    public ActionResult Index()
    {   
        string userLogin = User.Identity.Name;                        
        using (SmoothEntities db = new SmoothEntities())
        {                
            idUser = (db.Users.Where(c => c.Name == userLogin).First()).ID_User;
            return View(db.Employees.Where(u => u.ID_User == idUser).ToList());
        }  
    }
    public ActionResult About()
    {
        string userLogin = User.Identity.Name;            
        int idUser = 0;
        using (SmoothEntities db = new SmoothEntities())
        {                
            idUser = (db.Users.Where(c => c.Name == userLogin).First()).ID_User;
            return View(db.Employees.Where(u => u.ID_User == idUser).ToList());
        }  
    }

    public ActionResult Contact()
    {            
        return View();
    }
}

让我们想象鲍勃和比尔已经同时登录到网站。如果Bob将执行公共ActionResult Index()并且Bill将执行公共ActionResult关于(),那么Bob和Bill将拥有两个不同的公共字段idUser值吗?

为什么我要使用公共字段?由于我不想总是从Action方法中访问服务器中的数据,我认为这会降低我网站的性能,所以我决定创建公共字段。

2 个答案:

答案 0 :(得分:1)

  

我是对的,鲍勃和比尔将有两个不同的价值观   公共字段idUser如果Bob将执行公共ActionResult索引()   和比尔将执行公共ActionResult关于()?

是的,你是对的(即使他们执行相同的方法)。

默认情况下,对于每次点击asp.net mvc的请求,asp.net mvc都会创建一个控制器的新实例来为请求提供服务,这样他们就不会共享该字段值。

答案 1 :(得分:1)

无论是否是一个好主意,是的,每个请求都有一个不同的控制器类实例,因此同样适用于该领域。您可以通过实现以某种方式缓存并将相同控制器实例返回到所有/某些请求的控制器构建器来覆盖此行为。如果您只想分享您的字段,请将其设置为静态。