是公共字段对于控制器中的某些用户具有不同的值

本文关键字:用户 字段 控制器 | 更新日期: 2023-09-27 18:36:19

我有三个操作方法和公共字段 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();
    }
}

让我们想象一下,鲍勃和比尔同时登录到网站。如果鲍勃将执行公共操作结果索引()并且比尔将执行公共操作结果关于(),鲍勃和比尔将有两个不同的公共字段idUser值,我是否正确?

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

是公共字段对于控制器中的某些用户具有不同的值

我是否正确,鲍勃和比尔将有两个不同的值 public field idUser if Bob 将执行 public ActionResult Index() 比尔将执行公共行动结果关于()?

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

默认情况下,对于命中 asp.net mvc 的每个请求,asp.net mvc 将创建控制器的新实例来为请求提供服务,以便它们不共享字段值。

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