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咨询。

为什么存储操作属于控制器?请打开维基百科,阅读管理员的职责。