我一直在查看本网站上关于将模型数据保存到会话的一些答案,但似乎没有一个对我有用,或者很可能我没有正确理解它并且不确定如何实现它。 / p>
这是我一直在尝试的最新解决方案。 c# - How to save object to session in ASP.NET
在索引中,我在声明模型告诉我用户不存在时收到错误
模型
public class User
{
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
控制器
public ActionResult Index()
{
using (DefaultConnection db = new DefaultConnection())
{
var model = from u in db.Users select u;
var vm = (User)Session["User"];
return View(vm);
}
}
查看
@model User
@Model.Username
答案 0 :(得分:1)
我不太清楚你想在这里实现什么。但我可以在你的代码中看到一些问题
var vm = (User)Session["User"];
您正尝试使用密钥User
访问会话变量,并尝试将其强制转换为User
实例。这意味着,在执行此代码之前,您应该将有效的用户对象设置为Session [" User"]。如果你不这样做,你的演员表会失败(代码会崩溃),因为Session没有键的任何项目" User"
如果尚未设置,则在访问此会话对象之前,应将有效的User
对象设置为会话。
var us = new User { Id=1, Username="test"};
Session["User"] = us;
稍后,在从会话项访问之前,应始终检查它是否为空
User u = null;
if(Session["User"]!=null)
{
u = Session["User"] as User;
// you may use u now.
}
此外,您正在查询Users
表并选择记录 s 到变量model
。但是你没有在代码中的任何地方使用它。我不确定你为什么要那样做。
我不确定你为什么要使用session。如果您尝试在操作方法之间传递数据以查看,还有其他更好的解决方案,例如使用viewmodel(首选),ViewBag等。
记住会话数据可用于当前会话的整个应用程序,而不仅仅是一个页面。明智地使用它。
答案 1 :(得分:0)
为了将模型保存到Session,您需要先设置会话对象,例如
using (DefaultConnection db = new DefaultConnection())
{
var model = from u in db.Users select u;
Session["User"] = model; //Part where you set / save into the session
var vm = Session["User"] as User; //Part where you retrieve into the session
return View(vm);
}
答案 2 :(得分:0)
User user = Session["User"] as User;
if ( user == null) user = new User();
答案 3 :(得分:0)
如果要在视图上访问ViewModel,可以通过多种方式执行此操作,一种方法是将视图与模型关联(称为强类型视图)。您可以在视图中执行此操作:
@model type @*Associate your view to a ViewModel, where type is your ViewModel Class*@
<h1>@Model.Name</h1> @*access the properties of your view using @Model *@
@model用于将模型与视图相关联,而@Model用于访问视图的关联模型。我建议你先阅读ASP.NET MVC的工作原理。您可以访问ASP.NET MVC tutorial on views