5

本日リリースされたASP.NETMVC3RCでRazorをいじくり回しているだけです。

これで、「レイアウトページ」の概念ができました。これは、ASPXビューエンジンの「ビューマスター」の代わりになると思います。

しかし、レイアウトページの「表示」プロパティがわかりません。

新しいRazorビューを作成するときに作成される例を次に示します。

_Layout.cshtml

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

..。

MyView.cshtml

@model Mvc3FunParty.Models.Post

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

<title>その結果、レンダリングされたHTMLのタグに「SomeTitle」が挿入されます。

これは一体どのように機能しますか?「View」プロパティにカーソルを合わせると、「dynamic」タイプになります。

では、このプロパティは正確に何に使用する必要がありますか?そこに何かを詰めることはできますか?これはViewDataのRazor実装であると想定されていますか?

もしそうなら、それは「ViewDataDictionary」タイプであるべきではありませんか?Viewプロパティの「動的」タイプはなぜですか?

4

2 に答える 2

4

プロパティは、ViewプロパティのエイリアスですViewData。つまり、次のコード

View.Title

と同等です

ViewData["Title"]

これは、.NET 4 で導入された C# 言語の新しい「動的」機能を使用して機能します。基本的には、これまで静的に型付けされた言語であったレイト バインド コードを記述できます。詳細を知りたい場合は、ウェブ上にたくさんのリソースがあります。

ViewData物件は引き続きご利用いただけますので、どちらも交互にご利用いただけます。どちらも同じバッキング ストレージを使用するため、一方の方法で行われた変更は他方の方法で利用できます。

を使用する利点は、Viewより簡潔な構文です。欠点は、IntelliSense のサポートを受けられないことです。

ビュー ページで設定できView.Title、正しい値がレイアウト ページに表示される理由は、Razor ページのレンダリング順序によるものです。これをインサイドアウト レンダリングと呼びます。つまり、ビュー ページが最初に実行され、HTML 出力がバッファに収集され、次にレイアウト ページが実行され、バッファされたビュー ページの出力が を呼び出した場所に挿入されますRenderBody

于 2010-11-10T06:37:31.687 に答える
1

はい、「ビュー」は実際にあり、あなたが見ている構文を持つためにViewData使用されています ( )dynamicView.Title

訳すと

ViewData["Title"]

MVC、特に MVC 3 では、このような小さなナゲットがたくさんあり、混乱するでしょう :)。

于 2010-11-10T06:06:16.840 に答える