在此视图文件中,所有PageName值都呈现相同的值。为什么会这样?我知道@model声明了模型类型。我知道@Model会将模型渲染到屏幕上。我感到困惑的是为什么@ Model.PageName会匹配html帮助器中的Model.PageName。
@model Pages
<div class="moduleName">@Model.PageName</div>
<div class="moduleName">@Html.Raw(@Model.PageName)</div>
<div class="moduleName">@Html.Raw(Model.PageName)</div>
关于SO有很多类似的问题,但是找不到与之相匹配的问题。例如,@Model vs @model。
对不起,如果它简单的话!我看到@符号也表示一个无转义的字符串文字,并且在命名一个变量时也是一个保留的关键字。不确定这些将如何适用于此。
谢谢!
答案 0 :(得分:2)
在这种情况下没有区别。 C#中的标识符可以添加@
作为前缀,以区别于关键字(例如,您可以声明名为@class
但不是class
的变量)。 @
符号不是标识符的一部分,因此@MyVar
和MyVar
是相同的标识符。
@
之前的Html
是一个剃刀转义字符,它将上下文从HTML更改为C#代码隐藏。一旦你在那里,@
之前Model
什么都不做,因为它绑定到视图的静态Model
属性,就像Model
那样。
所以你可以按如下方式解释每一行:
<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>