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

モデルをセッションに保存するためにコードをどこに置くかについては、あまり心配しません。これは 1 行のコードなので、何も保存したり、抽出して何かを明確にしたりすることはありません。

Friend オブジェクトを作成するには、個人的には Automapper などを使用するか、ビュー モデルに populate メソッドを使用します。

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

コントローラーは、データを保存および取得し、そのデータをモデルに入力するのに適した場所です。モデルは、そのデータをビュー内に表示するためのサポートとして使用されます。

だからあなたがしていることはかなり正しいです。

たった 1 行のコードなので、Session から取得または格納するだけの静的クラスは必要ありません。

複数のフィールドの初期化を扱うときの Bigfellahull のアドバイスに対して +1。

于 2014-10-25T21:33:27.663 に答える