@Model vs视图文件中的模型

时间:2016-06-22 21:01:53

标签: c# .net razor

在此视图文件中,所有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

对不起,如果它简单的话!我看到@符号也表示一个无转义的字符串文字,并且在命名一个变量时也是一个保留的关键字。不确定这些将如何适用于此。

谢谢!

1 个答案:

答案 0 :(得分:2)

在这种情况下没有区别。 C#中的标识符可以添加@作为前缀,以区别于关键字(例如,您可以声明名为@class但不是class的变量)。 @符号不是标识符的一部分,因此@MyVarMyVar是相同的标识符。

@之前的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>