我有三个操作方法和公共字段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方法中访问服务器中的数据,我认为这会降低我网站的性能,所以我决定创建公共字段。
答案 0 :(得分:1)
我是对的,鲍勃和比尔将有两个不同的价值观 公共字段idUser如果Bob将执行公共ActionResult索引() 和比尔将执行公共ActionResult关于()?
是的,你是对的(即使他们执行相同的方法)。
默认情况下,对于每次点击asp.net mvc的请求,asp.net mvc都会创建一个控制器的新实例来为请求提供服务,这样他们就不会共享该字段值。
答案 1 :(得分:1)
无论是否是一个好主意,是的,每个请求都有一个不同的控制器类实例,因此同样适用于该领域。您可以通过实现以某种方式缓存并将相同控制器实例返回到所有/某些请求的控制器构建器来覆盖此行为。如果您只想分享您的字段,请将其设置为静态。