如何将视图模型值存储到会话中

时间:2013-07-02 02:34:26

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我已经尝试将我的viewmodel存储到会话中。 我将我的数据库存储到viewmodel,我想将viewmodel值保存到会话

我尝试使用

List<GetUserNameViewModel> getName = _accountService.GetLoginName(UserID)
                Session["GetName"] = getName;

但价值是

System.Collections.Generic.List`1[XNet.Repository.Model.GetUserNameViewModel], not Username...

如何将viewmodel值保存到session ??

这是我的服务

public List<GetUserNameViewModel> GetLoginName(int UserID)
        {
            List<User> user = (from d in _UserRepository.All()
                               where d.UserID == UserID
                               select d).ToList();

            List<GetUserNameViewModel> GetName = new List<GetUserNameViewModel>();

            foreach (User users in user)
            {
                GetName.Add(new GetUserNameViewModel
                    {
                        UserName = users.UserName
                    });
            }
            return GetName;
        }

我的控制器

   public ActionResult Index()
        {
            int UserID = Convert.ToInt32(User.Identity.Name);
            List<GetUserNameViewModel> getName = _accountService.GetLoginName(UserID);
                Session["GetName"] = getName;
            return View();
        }

1 个答案:

答案 0 :(得分:2)

在视图(Razor)中,如果该列表包含两个或更多List<T>个对象引用或仅调用GetUserNameViewModel方法,则必须转换对象以遍历FirstOrDefault()List<T>

中读取第一个或默认元素
@{
  List<GetUserNameViewModel> getNames =  Session["GetName"] as List<GetUserNameViewModel>;

  for(var name in getNames){
     //statements
  }

 //Or
 GetUserNameViewModel name = getNames.FirstOrDefault();

}

在其他情况下,更改GetLoginName方法。我认为GetLoginName方法应该返回一个不是List<T>的对象。

public GetUserNameViewModel GetLoginName(int UserID)
 {
   User user = (from d in _UserRepository.All()
                     where d.UserID == UserID
                     select d).FirstOrDefault();

  if(user==null)
      return null;

  return new GetUserNameViewModel() { UserName = user.UserName };
 }