Asp.net mvc MVC:将数据放入缓存或会话是否属于控制器?
如果将信息保存到下面的会话代码中,属于如下所示的控制器操作,或者它应该是我的模型的一部分,我有点困惑 我要补充的是,我还有其他控制器方法,稍后将读取此会话值Asp.net mvc MVC:将数据放入缓存或会话是否属于控制器?,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,如果将信息保存到下面的会话代码中,属于如下所示的控制器操作,或者它应该是我的模型的一部分,我有点困惑 我要补充的是,我还有其他控制器方法,稍后将读取此会话值 public ActionResult AddFriend(FriendsContext viewModel) { if (!ModelState.IsValid) { return View(viewModel); }
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");
}
我曾考虑在我的模型中添加一个静态实用程序类,它的功能如下,但在另一个文件中添加两行代码似乎很愚蠢
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;
}
我不会太担心将代码保存到会话的位置。这是一行代码,因此您不会通过提取它来保存任何内容或使任何内容更清晰 为了创建您的Friend对象,我个人要么使用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在处理多字段初始化时,请向Bigfellahull咨询。为什么存储操作属于控制器?请打开维基百科,阅读管理员的职责。