Dynamic v.Dynamic v. 강력한 형식의 보기Strongly Typed Views

Rick Andersonby Rick Anderson

다음 세 가지 방법으로 컨트롤러에서 ASP.NET MVC 3의 뷰로 정보를 전달할 수 있습니다.There are three ways to pass information from a controller to a view in ASP.NET MVC 3:

  1. 강력한 형식의 모델 개체입니다.As a strongly typed model object.
  2. 동적 형식 ( @model 동적 사용)As a dynamic type (using @model dynamic)
  3. ViewBag 사용Using the ViewBag

동적 및 강력한 형식의 뷰를 비교 하 고 대조 하는 간단한 MVC 3 최상위 블로그 응용 프로그램을 작성 했습니다.I've written a simple MVC 3 Top Blog application to compare and contrast dynamic and strongly typed views. 컨트롤러는 간단한 블로그 목록으로 시작 합니다.The controller starts out with a simple list of blogs:

using System.Collections.Generic;
using System.Web.Mvc;

namespace Mvc3ViewDemo.Controllers {

    public class Blog {
        public string Name;
        public string URL;
    }

    public class HomeController : Controller {

        List<Blog> topBlogs = new List<Blog>
      { 
          new Blog { Name = "ScottGu", URL = "http://weblogs.asp.net/scottgu/"},
          new Blog { Name = "Scott Hanselman", URL = "http://www.hanselman.com/blog/"},
          new Blog { Name = "Jon Galloway", URL = "http://www.asp.net/mvc"}
      };

        public ActionResult IndexNotStonglyTyped() {
            return View(topBlogs);
        }

        public ActionResult About() {
            ViewBag.Message = "Welcome to ASP.NET MVC!";
            return View();
        }
    }
}

IndexNotStonglyTyped 된 () 메서드를 마우스 오른쪽 단추로 클릭 하 고 Razor 뷰를 추가 합니다.Right click in the IndexNotStonglyTyped() method and add a Razor view.

8475 NotStronglyTypedView [1]8475.NotStronglyTypedView[1]

강력한 형식의 뷰 만들기 상자가 선택 되어 있지 않은지 확인 합니다.Make sure the Create a strongly-typed view box is not checked. 결과 보기에는 많은 정보가 포함 되지 않습니다.The resulting view doesn't contain much:

@{
    ViewBag.Title = "IndexNotStonglyTyped";
}

<h2>IndexNotStonglyTyped</h2>

On the first line of the Views\Home\IndexNotStonglyTyped.cshtml file, add the model directive and the dynamic keyword.
@model dynamic

강력한 형식의 뷰가 아닌 동적을 사용 하기 때문에 intellisense는 유용 하지 않습니다.Because we're using a dynamic and not a strongly typed view, intellisense doesn't help us. 완성 된 코드는 다음과 같습니다.The completed code is shown below:

@model dynamic
           
@{
    ViewBag.Title = "IndexNotStonglyTyped";
}

<h2>Index Not Stongly Typed</h2>

<p>
 <ul>
@foreach (var blog in Model) {
   <li>
    <a href="@blog.URL">@blog.Name</a>
   </li>   
}
 </ul>
</p>

6646 [1] NotStronglyTypedView_5F00_IE6646.NotStronglyTypedView_5F00_IE[1]

이제 강력한 형식의 뷰를 추가 합니다.Now we'll add a strongly typed view. 컨트롤러에 다음 코드를 추가 합니다.Add the following code to the controller:

public ActionResult StonglyTypedIndex() {
    return View(topBlogs);
}

정확 하 게 동일한 반환 뷰 (topBlogs)를 확인 합니다. 를 비 강력한 형식의 뷰로 호출 합니다.Notice it's exactly the same return View(topBlogs); call as the non-strongly typed view. StonglyTypedIndex () 내부를 마우스 오른쪽 단추로 클릭 하 고 뷰 추가를 선택 합니다.Right click inside of StonglyTypedIndex() and select Add View. 이번에는 블로그 모델 클래스를 선택 하 고 스 캐 폴드 템플릿으로 목록 을 선택 합니다.This time select the Blog Model class and select List as the Scaffold template.

5658 StrongView [1]5658.StrongView[1]

새 보기 템플릿 내에서 intellisense 지원을 받게 됩니다.Inside the new view template we get intellisense support.

7002 [1]7002.IntelliSense[1]