2010-11-10 29 views
5

Sadece bugün piyasaya sürülen ASP.NET MVC 3 RC içinde Razor ile uğraşmak.ASP.NET MVC 3 RC - Jilet "Görüntüle" Özellik

Şimdi, ASPX görünüm motorunda "View Master" ın yerini aldığını düşündüğüm bir "Layout Page" konsepti var.

Ancak, düzen sayfasının "Görünüm" özelliğini anlamıyorum. ...

MyView.cshtml

_Layout.cshtml

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

: Burada

Yeni Jilet Görünüm oluştururken oluşturulan örnek
@model Mvc3FunParty.Models.Post 

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

Bu, oluşturulmuş HTML’nin <title> etiketine eklenmiş "Bazı Başlık" ile sonuçlanır.

Bu nasıl çalışır? "Görünüm" özelliğinin üzerine geldiğimde "dinamik" yazıyor.

Peki bu özellik tam olarak ne için kullanılmalı? Orada bir şey bulabilir miyiz? Bunun ViewData'nın Razor uygulaması olması mı gerekiyor?

Ve eğer öyleyse, "ViewDataDictionary" türünde olmamalıdır? View özelliği için "dynamic" türünü neden kullanıyorsunuz?

+0

ve ayrıca, bir yan notta - herhangi birinin intellisense ile ilgili sorunları oldu mu? Resharper'ı kullanıyorum, ancak ayarlamayı VS2010'da (deyim tamamlandı) kontrol ettim. Model yapıyorum, ama im yazarken değil, akıllıca olurum. – RPM1984

+0

Modelinizin türünü tanımlamıyorsanız (modele göre odmodel MyModel') Model özelliği dinamik olarak (en az C# olarak) yazılır – marcind

+0

Ayrıca, Razor takımı her zaman Resharper ile çalışmaz. – marcind

cevap

1

Evet, "Görünüm" Gerçekten ViewData ve onlar Gördüğünüz sözdizimi (View.Title)

Bu gibi küçük külçelerin

ViewData["Title"] 

Lots çevirir sahip olacak şekilde dynamic kullanıyorsanız MVC'de ve özellikle MVC 3'te sizi şaşırtacak :).

+0

Tamam, ama asla ViewData ["Başlık"] 'i kullanıp ** veriyi oluşturmak için ** işaretlemede kullanmıştık, sonucu denetleyicide beklemeden önce kullandık ve Görünümde değeri görüntüledik. im karıştı, çünkü aslında View View içindeki verileri yaratıyor (ya da göründüğü gibi) – RPM1984

+0

ASP.NET Web Sayfalarında (WebMatrix'in kullandığı gibi, Razor'un bağımsız sürümü) hiçbir denetleyici yok, bu yüzden değerler satır içi –

+0

olarak ayarlanmalı VeAyrıca, denetleyici eylemine ViewModel.Title = "Foo" ifadesini ekledim ve görünüm sayfasından çıkardım ve "Foo" değerini aldım. Kodu sayfa görünümünde bırakırsam, denetleyici tarafından ayarlanan değeri geçersiz kılar. İlginç ... – RPM1984

4

özelliği, ViewData özellik için bir diğer adıdır. Yani aşağıdaki kod

View.Title 

Bu geç yazmasına olanak tanır Temelde .NET 4. tanıtılan C# dilinin yeni 'dinamik' özelliğini kullanarak çalışır

ViewData["Title"] 

eşdeğer olduğu anlamına gelir -bound kodu, şu ana kadar ne yazıyorsa, statik olarak yazılmış bir dil oldu. Daha fazla bilgi edinmek için web'de çok fazla kaynak var.

ViewData özelliği hala mevcuttur ve her ikisini birden kullanabilirsiniz. Her ikisi de aynı destek deposunu kullanırlar, böylece bir şekilde yapılan değişiklikler başka şekilde kullanılabilir.

View kullanmanın avantajı daha kısa bir sözdizimi. Dezavantaj, IntelliSense desteğini almamanızdır.

Görünüm sayfanızda View.Title ayarını yapabilmenizin ve sayfa düzeninde doğru değerin görüntülenmesinin sebebi, Razor sayfalarının oluşturma sırasına bağlıdır. Buna içten dışa aktarma diyoruz, yani ilk önce görüntüleme sayfanızın çalıştırıldığını, HTML çıktısının bir arabelleğe alınmasını sağladığını, sonra da düzen sayfasının çalışacağını ve tamponlanmış görünüm sayfası çıktısının RenderBody aradığınız yere enjekte edildiğini söylüyoruz.

+0

Bu mantıklı. Ben de TempData ve ViewData.Model ile kafam karışıyor sanırım - benim anlayışım ViewData.Model görünüm (model) dönüş yapmak yerine görünümüne render modeli ayarlamak için izin verir. Bu doğru mu? Cevabınız için teşekkürler. :) – RPM1984

İlgili konular