在我的MVC5应用程序中,我有基于帐户的登录系统。当用户登录到那里的帐户时,我们必须在数据库中查询主信息并将其存储在应用程序中的某个位置。因为我们需要在每个页面中使用它。所以最初我跟着会话来存储信息。但我想知道,有没有更好的选择来处理数据。
更清楚 我想处理主数据,如默认的Asp.Net用户身份,我们使用
User.Identity.IsAuthenticated
例如: 现在我正在使用这样的
类文件
public class MyClassProperty
{
public int Id {get;set;}
public int Value {get;set;}
}
控制器
List<MyClassProperty> obj = context.MyMaster.Tolist();
Session["MyClassProperty"]=obj;
视图
@{var obj =(List<MyClassProperty>)Session["MyClassProperty"];}
@obj.Id
@obj.Value
但我想在视图或其他控制器中访问这样的数据
@MyClassName.MyClassProperty.Id
任何人都可以建议我解决这个问题。
如果问题不明确,请发表评论。
答案 0 :(得分:0)
我只是对处理这类信息的各种方法进行了相当广泛的研究,我的意思是将数据保存在数据库中,有一个模型可以输入并在会话中存储“实时”值可能是最灵活的处理方式,而无需编写自己的逻辑来缓存它。我认为唯一要特别小心的是尝试保持这些数据的大小/占用空间小,因为会话可以轻松地扼杀内存。
关于内置配置文件/身份管理,是的,您可以单独使用它来处理大部分内容,但我发现它不是完全灵活的(或者如果它是,它不容易灵活)那么多我想跟踪的数据更具体到域而不是MVC /表示层本身,因此通过使用数据库存储所有“额外”信息,我们远离坚持MVC并具有更大的灵活性
至于将此信息公开给您的视图,您应该将它附加到某种类型的viewmodel类。这是基本的想法:
// the core model for the user info
public class UserProfile {
public int SomeValue {get;set;}
}
// a viewmodel for some specific view:
public class MyViewModel : DomainObject {
public UserProfile UserProfile {get;set;}
}
// from your controller:
public ActionResult MyAction() {
var model = repository.GetMyViewModel();
model.UserProfile = Session["UserProfile"] as UserProfile;
return View(model);
}
(好吧,所以存储库应该负责处理UserProfile信息的分配以及核心视图的模型,但这样可以很容易地演示)。
// then in your view:
@Html.TextBoxFor(m => m.UserProfile.SomeValue)