如果将信息保存到下面的会话代码,属于控制器操作,如下所示,或者它应该是我的模型的一部分,我有点困惑?
我想补充一点,我有其他控制器方法,以后会读取这个会话值。
public ActionResult AddFriend(FriendsContext viewModel)
{
if (!ModelState.IsValid)
{
return View(viewModel);
}
// Start - Confused if the code block below belongs in Controller?
Friend friend = new Friend();
friend.FirstName = viewModel.FirstName;
friend.LastName = viewModel.LastName;
friend.Email = viewModel.UserEmail;
httpContext.Session["latest-friend"] = friend;
// End Confusion
return RedirectToAction("Home");
}
我想在我的模型中添加一个静态实用程序类,它执行类似下面的操作,但在另一个文件中添加2行代码似乎很愚蠢。
public static void SaveLatestFriend(Friend friend, HttpContextBase httpContext)
{
httpContext.Session["latest-friend"] = friend;
}
public static Friend GetLatestFriend(HttpContextBase httpContext)
{
return httpContext.Session["latest-friend"] as Friend;
}
答案 0 :(得分:1)
我不会过分担心您将代码保存到会话的位置。这是一行代码,因此您不会通过提取任何内容来保存任何内容或使其更清晰。
为了创建你的朋友对象,我个人会使用像Automapper这样的东西,或者在我的视图模型上有一个填充方法。
var friend = viewModel.Populate(new Friend());
public void Populate(Friend friend)
{
friend.FirstName = this.FirstName;
}
至于将朋友保存到会话中,如果你想提取它,我会做类似于你的静态方法但作为会话扩展方法。只是因为它可以立即清楚存储它的位置。
// set
Session.LatestFriend(friend);
// get
var latestFriend = Session.LatestFriend();
答案 1 :(得分:0)
Controller是存储和获取数据的正确位置,并使用该数据填充模型。 模型用作支持在视图中显示的数据。
所以你正在做的事情非常正确。
不需要从Session获取或存储的静态类,因为它只涉及一行代码。
在处理多个字段初始化时,为Bigfellahull的建议+1。