Dinamik ve Kesin Türü Belirtilmiş Görünümler

tarafından Rick Anderson

ASP.NET MVC 3'te bir denetleyiciden görünüme bilgi geçirmenin üç yolu vardır:

  1. Kesin olarak yazılan bir model nesnesi olarak.
  2. Dinamik tür olarak (dinamik kullanarak @model )
  3. ViewBag'i kullanma

Dinamik ve kesin yazılmış görünümleri karşılaştırmak ve karşılaştırmak için basit bir MVC 3 Top Blog uygulaması yazdım. Denetleyici, basit bir blog listesiyle başlar:

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() yöntemine sağ tıklayın ve Razor görünümü ekleyin.

8475.NotStronglyTypedView[1]

Kesin olarak belirlenmiş görünüm oluştur kutusunun işaretli olmadığından emin olun. Sonuçta elde edilen görünüm çok fazla şey içermez:

@{
    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

Kesin olarak belirlenmiş bir görünüm değil dinamik bir görünüm kullandığımız için IntelliSense bize yardımcı olmaz. Tamamlanan kod aşağıda gösterilmiştir:

@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.NotStronglyTypedView_5F00_IE[1]

Şimdi kesin olarak yazılan bir görünüm ekleyeceğiz. Denetleyiciye aşağıdaki kodu ekleyin:

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

Tam olarak aynı dönüş Görünümü (topBlogs) olduğunu fark edin; , kesin olarak yazılmayan görünüm olarak çağırın. StonglyTypedIndex() içine sağ tıklayın ve Görünüm Ekle'yi seçin. Bu kez Blog Modeli sınıfını seçin ve yapı iskelesi şablonu olarak Liste'yi seçin.

5658.StrongView[1]

Yeni görünüm şablonunun içinde IntelliSense desteği elde ediyoruz.

7002.IntelliSense[1]