ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ASP.NET ] #5 뷰(View)에 데이터 전달 및 모델 사용 2 / ViewBag, ViewData, TempData 사용법
    타닥타닥/C# 2023. 1. 7. 18:51

     

     

      이전 포스팅에서 컨트롤러(Controller)에서 뷰(View)로 모델(Model)을 전달해서 사용하는 방법을 알아보았는데요, 컨트롤러에서 View() 메소드에 인자로 모델을 넣는 방법이었습니다. 하지만 이렇게 전달한다면 하나의 데이터밖에 전달하지 못합니다. 이번 포스팅에서는 ViewBag, ViewData, TempData를 이용해 여러 개의 데이터를 전달하는 방법을 알아보겠습니다.

     

     

    본 포스팅은 다음 순으로 작성되었습니다.

    1.  모델(Model)에서 뷰(View)로 데이터 전달 (ViewBag, ViewData, TempData)
     - 모델, 데이터 생성
     - 컨트롤러에서 뷰로 데이터 전달
     - 전달 받은 모델 데이터 사용
    2.  ViewBag, ViewData, TempData 각각의 특징

     

    1.  모델(Model)에서 뷰(View)로 데이터 전달 (ViewBag, ViewData, TempData)


      지난 시간에는 Board 모델로부터 게시글 데이터를 받아 뷰에 표시했습니다. 

      이번 포스팅은 한 가지의 모델 데이터가 아닌 여러 개의 데이터를 가져오는 예제를 살펴볼 것이기 때문에, 게시글 모델과 회원의 모델을 전달해 보겠습니다.

     


     

     1️⃣ 모델, 데이터 생성

     

    public class Member
    {
        public int Member_Num { get; set; }
        public string Id { get; set; }
        public string Password { get; set; }
        public string Name { get; set; }
    }

    Models/Member.cs

     

    public class MemberData
    {
        public List<Member> Members
        {
            get {
                return new List<Member>
                {
                    new Member { Member_Num = 1, Id = "id001", Name = "작성자1", Password = "1234" },
                    new Member { Member_Num = 2, Id = "id002", Name = "작성자2", Password = "1234" },
                    new Member { Member_Num = 3, Id = "id003", Name = "작성자3", Password = "1234" },
                };
            }
        }
    }

    Data/MemberData.cs

     

    public class MemberActs
    {
        /**
         * num : return할 회원의 회원번호
         */
        public Member GetMembers(int memberNum)
        {
            MemberData memberData = new MemberData();
    
            return memberData.Members.Where(i => i.Member_Num == memberNum).SingleOrDefault();
        }
    }

    Models/MemberActs.cs

     

     

      저번시간에 했던것과 같이 데이터의 속성을 나타내주는 모델, 데이터 처리하는 클래스, 데이터 파일을 하나씩 만들었습니다.

      데이터를 처리할 때 모든 회원의 정보를 반환할 필요는 없으므로, MemberActs에서 회원번호를 받아 해당 회원만 반환하도록 했습니다.

     


     

     2️⃣ 컨트롤러에서 뷰로 데이터 전달

     

    public ActionResult List()
    {
        BoardActs boardActs = new BoardActs();      
        MemberActs memberActs = new MemberActs();   
    
        var board = boardActs.GetBoards();          // 게시글 데이터 처리
        var member = memberActs.GetMember(1);       // 회원 데이터 처리 (회원번호 : 1)
    
    
        ViewBag.Member = member;                    // Member 라는 이름의 ViewBag
        ViewData["Member"] = member;                // Member 라는 이름의 ViewData
        TempData["Member"] = member;                // Member 라는 이름의 TempData
    
        return View(board);
    }

      지난 포스팅에서 작성했던 Board 컨트롤러에서 ViewBag, ViewData, TempData 부분을 추가했습니다. 모두 Member 라는 이름으로 전달하려고 합니다.  

     


     

     3️⃣ 전달 받은 모델 데이터 사용

     

    • ViewBag

      뷰에서 ViewBag는 아래 코드처럼 @를 붙이고 ViewBag.이름.속성 으로 바로 사용할 수 있습니다.

    <!-- ViewBag 사용방법 -->
    <h1>ViewBag : @ViewBag.Member.Name</h1>

     


     

    • ViewData

      하지만 ViewData는 ViewBag과 다르게 사용하려면 형변환을 거쳐야합니다.

    @{
        // ViewData 사용방법 1
        var viewDataMember = ViewData["Member"] as Application.Models.Member;
    }

      이와 같이 상단에 미리 형변환을 해서 변수 선언을 한 후 원하는 곳에서 아래 코드와 같이 사용할 수 있습니다.

    <!-- ViewData 사용방법2 -->
    <h1>ViewData : @viewDataMember.Name</h1>

     


     

    • TempData

      TempData는 ViewData와 같은 방식으로 사용합니다.

    @{
        // TempData 사용방법 1
        var tempDataMember = TempData["Member"] as Application.Models.Member;
    }
    <!-- TempData 사용방법2 -->
    <h1>TempData : @tempDataMember.Name</h1>

     

     

    2.  ViewBag, ViewData, TempData 각각의 특징


      이렇게 뷰에 데이터를 전달하는 세 가지 방법에 대해 알아보았습니다. 이제는 이 세 가지의 특징을 알아보겠습니다.

     

    • ViewBag
      - Dynamic Object로 되어있습니다.
      - 직관적이며, 자동으로 변수형을 유추하므로 형 변환이 필요 없습니다.
      - .Net Framework 3.5부터 사용 가능합니다.

    • ViewData
      - 키(Key) - 값(Value) 쌍을 요소로 갖는 Dictionary Collection 입니다.
      - ViewBag에 비해 속도가 빠릅니다.
      - 값(Value)이 오브젝트로 나오기 때문에 형 변환이 필요합니다.

    • TempData
      - ViewData와 같은 특성을 가집니다.
      - 값이 세션에 임시저장되어 redirection이 발생해도 값이 유지됩니다.

     

     


     

    이렇게 ASP.NET MVC에서 모델이 처리한 데이터를 ViewBag, ViewData, TempData를 통해 뷰에 전달하는 방법과
    활용하는 방법, 각각의 특징에 대해서 알아보았습니다.

     

    짠!

     

     

    댓글

Designed by Tistory.