Dynamiczne a silnie typizowane widoki

Autor : Rick Anderson

Istnieją trzy sposoby przekazywania informacji z kontrolera do widoku w ASP.NET MVC 3:

  1. Jako silnie typizowanego obiektu modelu.
  2. Jako typ dynamiczny (przy użyciu @model dynamicznego)
  3. Korzystanie z elementu ViewBag

Napisałem prostą aplikację MVC 3 Top Blog, aby porównać i porównać dynamiczne i silnie typizowane widoki. Kontroler rozpoczyna się od prostej listy blogów:

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();
        }
    }
}

Kliknij prawym przyciskiem myszy metodę IndexNotStonglyTyped() i dodaj widok Razor.

8475.NotStronglyTypedView[1]

Upewnij się, że pole Tworzenie silnie typizowanego widoku nie jest zaznaczone. Wynikowy widok nie zawiera zbyt wiele:

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

Ponieważ używamy dynamicznego, a nie silnie typizowanego widoku, funkcja IntelliSense nie pomaga nam. Ukończony kod przedstawiono poniżej:

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

Teraz dodamy silnie typizowany widok. Dodaj następujący kod do kontrolera:

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

Zwróć uwagę, że jest to dokładnie ten sam widok zwracany (topBlogs); wywołaj jako widok nietypowy. Kliknij prawym przyciskiem myszy wewnątrz kontrolki StonglyTypedIndex() i wybierz polecenie Dodaj widok. Tym razem wybierz klasę Model bloga i wybierz pozycję Lista jako szablon szkieletu.

5658.StrongView[1]

W nowym szablonie widoku uzyskujemy obsługę funkcji IntelliSense.

7002.IntelliSense[1]