何时在 MVC 4 剃刀中使用@Model和模型

本文关键字:@Model 模型 MVC 剃刀 何时 | 更新日期: 2023-09-27 18:33:59

使用VS 2013,C#,在我的PartialView中,我有以下内容;

@model MyProject.Models.MyObject

我可以通过以下方式访问模型属性;

@Model.MyProperty

Model.MyProperty

注意到,如果我不使用@Model,我将无法获得智能感知来显示对象属性名称。 除此之外,它们的工作方式完全相同。

因此,我什么时候应该使用@Model.MyProperty,什么时候应该只使用Model.MyProperty?

何时在 MVC 4 剃刀中使用@Model和模型

"@"符号告诉 Razor 视图引擎后面跟一个内联表达式。但是引擎足够智能,在某些情况下你不需要"@"符号。例如,在简单的代码块中,例如

@{ 
  int x = 123; 
  string y = Model.AStringProperty;
}

或者,如果您连续使用多个 Razor/C# 语句:

@for (var i = 0; i < Model.List.Count(); i++) {
        var image = Model.List[i];
        <div class="item @(i == 0 ? "active" : "")">
        (... other stuff ...)
        </div>
 }

有点奇怪的是,你没有得到智能感知 - 你应该得到一个。

更多示例:http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx/

因此,(运行时)编译器会告诉您何时使用"@"符号。

开头

的 @ 将以下文本标记为代码元素,而不是视图标记。所以:

<li>@Model.Name</li>

<li>
    @if(condition){
        Model.Name
    }
</li>

基本上,两者永远不应该相同。

如果您在文本块中,则只有@Model.MyProperty应该有效。应显示其他文本。(@引入了一个"迷你代码块")在代码块中,Model.MyProperty工作正常,但 @ 应该是语法错误。

Razor 分析器使用@符号来指示 C# 代码,并用于指示内联表达式、单语句块和多语句块。

它还具有强键入对模型的引用的好处。

这就是您能够创建如下代码块的原因:

@{ 
  int x = 123; 
  string y = "because.";
}

如果对模型的引用包含在代码块中,例如@{}则无需在模型引用前面加上@符号。

考虑到这一点,我总是会尽可能尝试使用 @ 前缀。