2013-04-28 52 views
3

如果將信息保存到下面的會話代碼,屬於如下所示的控制器操作或應該是我的模型的一部分,我有點困惑嗎?MVC:是否將數據放入緩存或會話屬於控制器?

我會補充說我有其他控制器方法,以後會讀取這個會話值。

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

爲什麼存儲操作屬於控制器?請打開維基百科並閱讀管理員的職責。 – 2013-04-28 10:51:20

+0

** [請點擊此處](http://stackoverflow.com/a/735148/2007801)** – 2013-04-28 13:37:33

回答

1

我不會太擔心你把代碼保存到會話的模式。這是一行代碼,所以你不需要保存任何東西或者通過提取出更清晰的內容。

爲了創建您的Friend對象,我個人會使用類似Automapper的東西,或者在我的視圖模型上使用填充方法。至於將朋友保存到會話中,如果你想提取它,我會做一些類似於你的靜態方法,但作爲會話擴展方法。只是因爲它立即清除了它的存儲位置。

// set 
Session.LatestFriend(friend); 

// get 
var latestFriend = Session.LatestFriend(); 
0

控制器是存儲和獲取數據並使用該數據填充模型的正確位置。 模型用作支持要在視圖中顯示的數據。

所以你在做什麼是非常正確的。

不需要只從Session獲取或存儲的靜態類,因爲它只關於一行代碼。

+1爲Bigfellahull在處理多字段初始化時的建議。

相關問題