You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

MVC5+VS2017社区版Razor视图@:语法报错求助

解决Razor视图中@:语法解析错误的方案

嘿,我来帮你搞定这个MVC5里Razor语法的问题!你遇到的这个":"开头无效的错误,大概率是@:的使用场景不对,或者Razor解析环境出了小问题,咱一步步来解决:

  • 确认@:的使用场景是否正确
    @:语法是用来在**代码块(比如if、foreach循环里)**中切换到纯文本输出模式的,如果在代码块外面直接用@:,Razor就会报错。举个例子:
    错误用法:

    @:这是一段普通文本  <!-- 不在代码块里,会报错 -->
    

    正确用法:

    @if(Model.IsActive)
    {
        @:当前用户状态是激活的
    }
    
  • 标签替代@:(更稳妥的方案)
    如果觉得@:容易踩坑,换成<text>标签包裹文本效果一样,尤其是多行文本的时候可读性更强,Razor解析也更稳定:

    @foreach(var item in Model.Items)
    {
        <text>
            当前项:@item.Name
            价格:@item.Price
        </text>
    }
    
  • 检查项目的Razor配置是否正确
    有时候项目的web.config配置出错会导致Razor版本不兼容,打开项目根目录下的web.config,找到<system.web.webPages.razor>节点,确认配置如下(MVC5对应的Razor版本是3.0):

    <system.web.webPages.razor>
      <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
          <add namespace="System.Web.Mvc" />
          <add namespace="System.Web.Mvc.Ajax" />
          <add namespace="System.Web.Mvc.Html" />
          <add namespace="System.Web.Optimization"/>
          <add namespace="System.Web.Routing" />
        </namespaces>
      </pages>
    </system.web.webPages.razor>
    

    另外,Views文件夹下的web.config也要确认版本一致,避免版本冲突。

  • 清理缓存并重启Visual Studio
    VS有时候会缓存旧的解析信息,导致奇怪的语法错误。试试:

    1. 右键解决方案 → 清理解决方案
    2. 关闭VS,重新打开项目
    3. 重新生成解决方案,再运行看看
  • 检查代码块的闭合情况
    要是你的代码块(比如if、foreach)漏掉了大括号,Razor会把后面的代码解析到错误的上下文里,也会触发这个报错。仔细检查你的代码,确保所有代码块的大括号都正确闭合。

内容的提问来源于stack exchange,提问作者Jose Alvaro Pecho Carnero

火山引擎 最新活动