2016-06-22 1 views
0

In dieser Ansichtsdatei rendern alle PageName-Werte gleich. Warum ist das so? Ich verstehe, dass @model den Modelltyp deklariert. Ich verstehe, dass @Model das Modell auf dem Bildschirm darstellt. Was mich verwirrt, ist, warum @ Model.PageName mit Model.PageName im HTML-Helfer übereinstimmt.@Model vs Model in einer Ansichtsdatei

@model Pages 

<div class="moduleName">@Model.PageName</div> 
<div class="moduleName">@Html.Raw(@Model.PageName)</div> 
<div class="moduleName">@Html.Raw(Model.PageName)</div> 

Es gibt viele ähnliche Frage zu SO, aber nicht eine, die dies durchaus entspricht. Zum Beispiel: @Model vs @model.

Entschuldigung, wenn es etwas Einfaches ist! Ich sehe das @ -Symbol als auch ein Escape-freies Zeichenfolgenliteral und auch beim Benennen einer Variablen, die auch ein reserviertes Schlüsselwort ist. Ich bin mir nicht sicher, wie das hier aussehen würde.

danke!

Antwort

2

In diesem Kontext gibt es keinen Unterschied. Bezeichnern in C# kann eine @ vorangestellt werden, um sie von Schlüsselwörtern zu unterscheiden (z. B. können Sie eine Variable mit dem Namen @class, aber nicht class deklarieren). Das Zeichen @ ist nicht Teil der Kennung, daher sind @MyVar und MyVar die gleiche Kennung.

Die @ vor Html ist ein Rasierer Escape-Zeichen, das den Kontext von HTML zu C# -Code-Behind ändert. Sobald Sie dort sind, die @ vor Model tut nichts, weil es an die statische Eigenschaft der Ansicht bindet, genau wie Model tut.

So können Sie jede Zeile wie folgt interpretieren:

<div class="moduleName">--begin C# expression-- Model.PageName --end C# expression--</div> 
<div class="moduleName">--begin C# expression-- Html.Raw(Model.PageName) --end C# expression--</div> 
<div class="moduleName">--begin C# expression-- Html.Raw(Model.PageName) --end C# expression--</div>