Динамические и строго типизированные представления
Существует три способа передачи данных из контроллера в представление в ASP.NET MVC 3:
- Как строго типизированный объект модели.
- Как динамический тип (с использованием @model dynamic)
- Использование ViewBag
Я написал простое приложение MVC 3 Top Blog для сравнения и контраста динамических и строго типизированных представлений. Контроллер начинается с простого списка блогов:
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.
Убедитесь, что флажок Создать строго типизированное представление не установлен. Результирующее представление не содержит много:
@{
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 не помогает нам. Готовый код показан ниже:
@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>
Теперь мы добавим строго типизированное представление. Добавьте в контроллер следующий код:
public ActionResult StonglyTypedIndex() {
return View(topBlogs);
}
Обратите внимание, что это точно так же возвращается View(topBlogs); вызов в качестве представления, не являющегося строго типизированным. Щелкните правой кнопкой мыши элемент StonglyTypedIndex() и выберите Добавить представление. На этот раз выберите класс Blog Model (Модель блога ) и выберите List (Список ) в качестве шаблона шаблонов.
В новом шаблоне представления мы получаем поддержку Intellisense.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по