ASP.NET MVC 3 RC - Бритва "Посмотреть" Свойство - PullRequest
5 голосов
/ 10 ноября 2010

Просто возиться с Razor в ASP.NET MVC 3 RC, выпущенном сегодня.

Теперь у нас есть концепция «страницы макета», которая, как я полагаю, является заменой «View Master»в ASPX View Engine.

Но я не понимаю, свойство "View" страницы макета.

Вот пример, который создается при создании нового Razor View:

_Layout.cshtml

<html>
<head>
   <title>@View.Title</title>

...

MyView.cshtml

@model Mvc3FunParty.Models.Post

@{
   View.Title = "Some Title";
   Layout = "~/Views/Shared/_Layout.cshtml";
}

Какиев результате "Some Title" вставляется в тег <title> визуализированного HTML.

Как это работает?При наведении курсора на свойство «Вид» оно имеет тип « dynamic ».

Так для чего именно это свойство должно использоваться?Можем ли мы что-нибудь там набить?Предполагается, что это реализация Razor ViewData?

И если так, не должен ли он быть типа " ViewDataDictionary "?Почему тип " dynamic " для свойства View?

Ответы [ 2 ]

4 голосов
/ 10 ноября 2010

Свойство View является псевдонимом для свойства ViewData. Это означает, что следующий код

View.Title

эквивалентно

ViewData["Title"]

Это работает с использованием новой «динамической» функции языка C #, представленной в .NET 4. По сути, она позволяет вам писать код с поздней привязкой на том, что до сих пор было языком со статической типизацией. В Интернете много ресурсов, если вы хотите узнать больше.

Свойство ViewData по-прежнему доступно, и вы можете использовать оба взаимозаменяемо. Они оба используют одинаковое резервное хранилище, поэтому изменения, внесенные одним способом, будут доступны другим способом.

Преимущество использования View заключается в более кратком синтаксисе. Недостатком является то, что вы не получаете поддержку IntelliSense.

Причина, по которой вы можете установить View.Title на странице просмотра и правильное значение отображается на странице макета, связана с порядком рендеринга страниц Razor. Мы называем это рендерингом наизнанку, что означает, что сначала выполняется ваша страница просмотра, ее вывод HTML собирается в буфер, затем выполняется страница макета и вывод страницы с буферизованным представлением вводится там, где вы вызываете RenderBody.

1 голос
/ 10 ноября 2010

Да, «Вид» на самом деле ViewData, и они используют dynamic, чтобы иметь синтаксис, который вы видите (View.Title)

Это означает

ViewData["Title"]

Множество маленьких самородков, подобных этому, в MVC и особенно в MVC 3, которые вас смущают:).

...