我試圖找到最好的方式來保持整個應用程序和會話登錄的用戶數據。我對MVC相當陌生,但對於Web表單來說,就像在主頁面上聲明一個公共屬性並在登錄時設置CurrentUser對象一樣簡單。我已經嘗試過使用我的MVC應用程序,但是我一直收到「Object reference未設置爲實例對象「錯誤。我不是說我有一個基類和CustomController類,我的所有控制器從MVC 4堅持在整個網站的數據
public abstract class BaseController : Controller
{
public CompanyUser CurrentUser
{
get { return (Session["CurrentCompanyUser"] as CompanyUser); }
set { Session["CurrentCompanyUser"] = value; }
}
}
派生正如你所看到的,我存儲在Session對象的CurrentUser對象,像這樣(這是在登錄操作):
if (ModelState.IsValid)
{
if (WebSecurity.Login(model.Username, model.Password))
{
using (dbContext db = new dbContext())
{
int userId = WebSecurity.GetUserId(model.Username);
User user = db.Users.Find(userId);
if (user != null)
{
CompanyUser companyUser = db.CompanyUsers.Find(userId);
if (companyUser.IsActive)
{
CurrentUser = companyUser;
if (Roles.GetRolesForUser(model.Username).Contains("Administrator"))
return RedirectToAction("Index", "Admin");
else
return RedirectToAction("Index", "Dashboard");
}
}
}
}
}
這工作得很好,但是當我嘗試從DashboardController訪問:
public ActionResult Index()
{
return View(new ImageModel() { ImageName = CurrentUser.Company.Logo });
}
我得到以下錯誤: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
我希望能夠存儲登錄的用戶數據(形式爲CompanyUser
對象),並可以從我的任何控制器輕鬆訪問它。這是可能的還是更適合在每次換頁時查找這些數據?
這是因爲每次點擊一些控制器動作調用,基本控制器也被實例化並且屬性被重新初始化。 – 2014-09-21 17:55:52
mvc與web不同,你不能這樣做 – 2014-09-21 17:56:12