C# 何时在MVC4中使用@Model和Model

C# 何时在MVC4中使用@Model和Model,c#,asp.net-mvc-4,razor,C#,Asp.net Mvc 4,Razor,使用VS2013,C#,在我的局部视图中,我有以下内容: @model MyProject.Models.MyObject 我可以通过访问模型属性 @Model.MyProperty 或 我注意到,如果我不使用@Model,我就无法使用IntelliSense来显示对象属性名称。除此之外,它们的工作原理完全相同 因此,何时应该使用@Model.MyProperty,何时应该只使用Model.MyProperty?开头的@将以下文本标记为代码元素,而不是视图标记。因此: <li>@

使用VS2013,C#,在我的局部视图中,我有以下内容:

@model MyProject.Models.MyObject
我可以通过访问模型属性

@Model.MyProperty

我注意到,如果我不使用@Model,我就无法使用IntelliSense来显示对象属性名称。除此之外,它们的工作原理完全相同


因此,何时应该使用@Model.MyProperty,何时应该只使用Model.MyProperty?

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

<li>@Model.Name</li>
  • @Model.Name
  • @如果(条件){ 型号.名称 }

  • 符号“@”告诉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>
     }
    
    for(var i=0;i 有点奇怪的是,你没有智能感知——你应该有一个

    还有一些例子:


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

    基本上,这两个符号的工作方式不应该相同

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

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

    它还有一个好处,就是可以强键入对模型的引用

    这就是为什么您能够创建如下代码块:

    @{ 
      int x = 123; 
      string y = "because.";
    }
    
    如果对模型的引用被包装在类似于
    @{}
    的代码块中,则不需要在模型引用前面加上
    @
    符号


    考虑到这一点,如果可能的话,我会尽量使用
    @
    前缀。

    第一条语句强烈键入视图,其他语句访问视图数据,如果要将代码与标记分开,则需要@符号
    @for (var i = 0; i < Model.List.Count(); i++) {
            var image = Model.List[i];
    
            <div class="item @(i == 0 ? "active" : "")">
            (... other stuff ...)
            </div>
     }
    
    @{ 
      int x = 123; 
      string y = "because.";
    }