2

如果将信息保存到下面的会话代码中,我有点困惑,属于如下所示的控制器操作,还是应该是我的模型的一部分?

我要补充一点,我还有其他控制器方法可以稍后读取此会话值。

  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;
}
4

2 回答 2

1

我不会太担心您将代码放在哪里以将模型保存到会话。这是一行代码,因此您不会通过提取任何内容来保存任何内容或使任何内容更清晰。

为了创建您的 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();
于 2013-04-28T10:06:51.423 回答
0

Controller 是存储和获取数据并使用该数据填充模型的正确位置。模型用于支持要在视图中显示的数据。

所以你在做什么是非常正确的。

不需要从 Session 获取或存储的静态类,因为它只有一行代码。

+1 为 Bigfellahull 在处理多个字段初始化时的建议。

于 2014-10-25T21:33:27.663 回答