Freigeben über


Dynamische im Vergleich zu Stark typisierten Ansichten

von Rick Anderson

Es gibt drei Möglichkeiten, Informationen von einem Controller an eine Ansicht in ASP.NET MVC 3 zu übergeben:

  1. Als stark typisiertes Modellobjekt.
  2. Als dynamischer Typ (mit dynamischer Verwendung @model )
  3. Verwenden des ViewBag

Ich habe eine einfache MVC 3 Top Blog-Anwendung geschrieben, um dynamische und stark typisierte Ansichten zu vergleichen und zu kontrastieren. Der Controller beginnt mit einer einfachen Liste von 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();
        }
    }
}

Klicken Sie mit der rechten Maustaste in die IndexNotStonglyTyped()-Methode, und fügen Sie eine Razor-Ansicht hinzu.

8475.NotStronglyTypedView[1]

Stellen Sie sicher, dass das Kontrollkästchen Stark typisierte Ansicht erstellen nicht aktiviert ist. Die resultierende Ansicht enthält nicht viel:

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

Da wir eine dynamische und keine stark typisierte Ansicht verwenden, hilft intellisense uns nicht weiter. Der vollständige Code ist unten dargestellt:

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

Nun fügen wir eine stark typisierte Ansicht hinzu. Fügen Sie dem Controller den folgenden Code hinzu:

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

Beachten Sie, dass es genau die gleiche Rückgabe view(topBlogs) ist. rufen Sie als nicht stark typisierte Ansicht auf. Klicken Sie mit der rechten Maustaste in StonglyTypedIndex(), und wählen Sie Ansicht hinzufügen aus. Wählen Sie dieses Mal die Blog Model-Klasse aus, und wählen Sie List als Gerüstvorlage aus.

5658.StrongView[1]

In der neuen Ansichtsvorlage erhalten wir intellisense-Unterstützung.

7002.IntelliSense[1]