Tôi đã hỏi một câu hỏi liên quan nhưng đã làm hỏng tiêu đề và không ai hiểu được nó. Vì bây giờ tôi có thể đặt câu hỏi chính xác hơn, tôi đã quyết định cải cách câu hỏi này thành một câu hỏi mới và đóng câu hỏi cũ. Xin lỗi vì chuyện đó.Tại sao người dùng (như trong User.Identity.Name) null trong bộ điều khiển cơ sở trừu tượng của tôi?
Vì vậy, những gì tôi muốn làm là chuyển dữ liệu (biệt hiệu của người dùng tùy chỉnh của tôi như được lưu trữ trong db) vào LoginUserControl. Đăng nhập này được trả lại từ trang chủ thông qua Html.RenderPartial(), vì vậy những gì tôi thực sự cần làm là đảm bảo rằng, nói ViewData ["UserNickname"] có mặt trên mọi cuộc gọi. Nhưng tôi không muốn điền vào ViewData ["UserNickname"] trong mỗi và mọi hành động của mọi bộ điều khiển, vì vậy tôi quyết định sử dụng this approach và tạo bộ điều khiển cơ sở trừu tượng sẽ thực hiện công việc cho tôi, như vậy:
public abstract class ApplicationController : Controller
{
private IUserRepository _repUser;
public ApplicationController()
{
_repUser = RepositoryFactory.getUserRepository();
var loggedInUser = _repUser.FindById(User.Identity.Name); //Problem!
ViewData["LoggedInUser"] = loggedInUser;
}
}
Bằng cách này, bất kỳ Bộ điều khiển phát sinh nào của tôi, thông tin người dùng sẽ có mặt.
Cho đến nay, rất tốt. Bây giờ cho vấn đề:
Tôi không thể gọi User.Identity.Name vì User
đã bị vô hiệu. Đây không phải là trường hợp trong tất cả các bộ điều khiển của tôi, vì vậy điều này là cụ thể cho bộ điều khiển cơ sở trừu tượng.
Tôi đang đặt User.Identity.Name thông qua FormsAuthentication tại một vị trí khác trong mã, nhưng tôi nghĩ rằng điều này không thể là vấn đề - afaik User.Identity.Name có thể là null, nhưng không phải là chính Người dùng.
Dường như với tôi như HttpContext không có sẵn (vì cũng null ;-) và tôi thiếu một điểm đơn giản nhưng quan trọng ở đây. Bất cứ ai có thể cho tôi một số gợi ý? Tôi thực sự sẽ đánh giá cao nó.
Lạ, vì 'Người dùng' là null nhưng' System.Web.HttpContext.Current.User' thì không. MVC 1.0 –