[ASP.NET MVC] Controller에서 데이터 전달

Posted by 알 수 없는 사용자
2015. 7. 11. 19:39 프로그래밍/.NET

웹 응용 프로그래밍에서 가장 중요한 역할 중에 하나는 데이터를 구성하고 그것을 페이지에 표현하는 것이다.

MVC에서는 컨트롤러가 데이터를 만들어서 뷰로 전달하는 역할을 한다.

ASP.NET MVC에서는 데이터를 전달 하기 위해 ViewBag을 이용하거나  강력한 형식의 뷰(Srongly Typed View)를 이용하는 방법이 있는데 하나씩 살펴보자.

 

1. ViewBag을 이용한 데이터 전달

ViewBag은 dynamic 형식을 사용하여 변수의 Type을 검사하지 않는다. 변수의 타입을 검사하지 않기 때문에 어떤 Objext도 ViewBag에 저장하여 뷰에 전달이 가능하다.

우선 코드를 보자

 

[코드 1]

 

[코드 2]

[코드 1]은 지난번에 작성한 MyFirstController에서 데이터를 전달하는 코드이다.

코드를 보면 ViewBag 객체에 데이터를 추가하고 있다. 단순히 뷰에 메시지만 전달 하려고 하면

[코드 1]의 8번째 줄과 같이 ViewBag에 Message라는 속성을 정의하고 데이터를 추가할 수 잇다.

다른 방법으로 뷰에 모델에서 만든 객체를 전달 하려고 한다면 [코드 2]에서 처럼 Models 폴더에 객체를 하나 생성하고  

[코드 1]의 16번째 줄처럼 ViewBag에 객체를 대입하여 전달하는 것도 가능하다.

 

[코드 3]

컨트롤러에서 ViewBag에 담았으니 뷰에서 데이터를 어떻게 사용하는지 보자.

뷰에서 ViewBag사용은 컨트롤러에서 데이터를 대입한 방법대로 ViewBag에서 정한 속성을 접근하면 된다.

데이터를 가져올때는 @를 붙이는데 이는 Razor 코드블록이다.

[코드 3]의 6번째 줄 처럼 ViewBag.Message를 접근할 수도 있고 7, 8번째 줄 처럼 생성한 모델의 속성에 접근하여 데이터를 가져올 수도 있다.

다만 dynamic 형식을 사용하기 때문에 인텔리센스는 적용되지 않는다....

 

[그림 1]

흐름을 정리하면 컨트롤러에서 ViewBag에 데이터를 저장하고

뷰에서는 저장한 ViewBag에 속성을 가져다 쓰게 되고 그 결과 [그림 1]과 같이 화면에 보이게 되는것이다.

 

2. 강력한 형식의 뷰(Strongly Typed View)

이번에는 ViewBag을 사용하지 않고 뷰에 객체를 전달하는 다른방법을 보자.

강력한 형식의 뷰는 컨트롤러에서 뷰함수를 리턴할 때 객체를 전달하고 뷰에서는 전달한 객체를 사용하는 방법이다.

역시 잘 모르겠으니 코드를 보는 것이 좋겠다....

[코드 4]

[코드 5]

우선 [코드 4]는 Controlls폴더에 MySecondController를 생성했고 [코드 5]는 Models폴더에 MySecondModel을 생성한 것이다. 컨트롤러 추가 방법은 여기를 참고하기 바란다.

ViewBag을 사용할 때에는 ViewBag에 속성을 사용하여 데이터를 전달햇는데 [코드 4]에서는 뷰함수를 리턴할때 객체를 전달하고 있다.

이제 컨트롤러에서 뷰를 추가해보도록 하자.

 

[그림 2]

컨트롤러의 Index함수에서 마우스 오른쪽 버튼을 클릭하여 뷰 추가항목을 선택하면 [그림 2]와 같이 뷰 추가 팝업이 나타난다.

 뷰 이름을 정하고 나서 아래부분에 강력한 형식의 뷰 만들기에 체크를 하고 모델 클래스에 Models에 생성한 MySecondModel을 선택 후 추가를 클릭한다.

이는 뷰에서 MySecondModel을 사용하겠다고 명시하는 것이다.

 

[코드 6]

[코드 6]의 생성된 뷰에서 보면 1번째 줄에 @model MvcApplication.Models.MySecondModel이 선언되어잇다.

우리가 뷰를 추가할 때 강력한 형식의 뷰 만들기를 체크했기 때문에 뷰에서는 MySecondModel을 사용할 수 있게 된다.

모델을 사용하는 방법은 9, 10번째 코드를 보면 @Model.Title, @Model.Message와 같이 모델에서 생성한 객체의 속성에 직접 접근하여 사용한다.

여기서는 어떤 모델을 사용하겠다고 정의 했기 때문에 @Model. 이후에 인텔리센스도 적용이 된다.

 

[그림 3]

[그림 3]은 결과 화면이다. 모델을 전달하는 방법이 다르다고 해서 뷰에서 보이는 게 다르거나 한 것은 아니다.

각각의 방법에 대해 특징을 이해하고 상황에 맞게 사용하면 될 듯하다.

'프로그래밍 > .NET' 카테고리의 다른 글

[ASP.NET MVC]Ninject 사용법  (748) 2015.08.23
[ASP.NET MVC]Dependency Injection 개념  (1309) 2015.08.02
[ASP.NET MVC] Project 생성, MVC Hello World!  (4) 2015.06.26
<ASP.NET> Razor  (5) 2015.05.18
<.NET> .NET FRAMEWORK 란?  (4) 2015.05.18