对于控制器中的某些用户,公共字段是不是具有不同的值? [复制]
Posted
技术标签:
【中文标题】对于控制器中的某些用户,公共字段是不是具有不同的值? [复制]【英文标题】:Is public field has different values for some users in controller? [duplicate]对于控制器中的某些用户,公共字段是否具有不同的值? [复制] 【发布时间】:2015-01-04 10:04:55 【问题描述】:我有三个action方法和public field 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 和 Bill 同时登录到该网站。如果 Bob 将执行 public ActionResult Index() 并且 Bill 将执行 public ActionResult About(),那么 Bob 和 Bill 将有两个不同的公共字段 idUser 值,我对吗?
为什么要使用公共字段?由于我不想总是在 Action 方法中从服务器访问数据,我认为这会降低我网站的性能,所以我决定创建公共字段。
【问题讨论】:
全局变量是不好的做法!使用 Web-Caching 或 Session 来保存用户 ID!例如,您将在登录时获取 UserId,因此将其存储在那里并再次在控制器中使用它,无需浪费时间和资源再次请求它。 “我认为这会降低我网站的性能” - 使用类级别变量而不是局部变量不会对性能产生任何明显影响。 【参考方案1】:Bob 和 Bill 有两个不同的值,我说得对吗? 公共字段 idUser 如果 Bob 将执行 public ActionResult Index() 并且 Bill 会执行 public ActionResult About()?
是的,你是对的(即使他们执行相同的方法)。
默认情况下,对于到达 asp.net mvc 的每个请求,asp.net mvc 都会创建一个控制器的新实例来为请求提供服务,这样它们就不会共享字段价值观。
【讨论】:
不是 Web API,它是 MVC... @Ricardo Peres:一个错误,但它们相似。我已经更新了,谢谢。【参考方案2】:无论这是否是一个好主意,是的,每个请求都会有一个不同的控制器类实例,因此字段也是如此。您可以通过实现一个控制器构建器来覆盖此行为,该构建器以某种方式缓存并向所有/某些请求返回相同的控制器实例。如果您只想共享您的字段,请将其设为静态。
【讨论】:
以上是关于对于控制器中的某些用户,公共字段是不是具有不同的值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如果 PIG 中的第二个字段具有不同的值,如何过滤/删除记录
如何加入具有不同 CONTENT_ITEM_TYPE 但共享一个公共字段的记录,即 RAW_CONTACT_ID?