【问题标题】:Razor @if inside <script> is rejected by VS11<script> 中的 Razor @if 被 VS11 拒绝
【发布时间】:2026-02-13 10:40:01
【问题描述】:

以下标记是否不正确,还是 MVC4 中 Razor 引擎中的错误?无论哪种方式,最好的解决方法是什么?

显示View1.cshtml的全部内容。它编译得很好,但是 Intellisense 错误突出显示很烦人。 (作为图片包含在内,您可以看到 VS11 如何拒绝语法。)

注意@: 语法(而不是&lt;text&gt;&lt;/text&gt;)也不被接受。

【问题讨论】:

  • 当 c# 代码出现在 &lt;script&gt; 中时,VS2010 中的 Intellisense 也会表现得很奇怪。我刚刚克服了它。
  • 您是否在 MS Connect 上报告了该错误?
  • 已经完成tinyurl.com/vs11error。暂时有什么解决办法吗?还是我必须忽略它?

标签: visual-studio razor syntax-highlighting asp.net-mvc-4


【解决方案1】:

我也注意到语法荧光笔的奇怪行为。这不是一个真正的答案,而是:

  • 我尽量避免将模型数据混入 javascript。虽然功能强大,但它有点像意大利面。
  • 我也尝试在 html 中包含尽可能少的标签。我在其中使用 js 包含和 jQuery $(document).ready(function () ... 函数。
  • 您可以在此处从数据属性中提取 JSON 数据,并根据这些属性做出 JavaScript 决策。

(想写这篇评论,但没有找到方法,抱歉debump)

【讨论】:

    【解决方案2】:

    将 JavaScript 与 Razor 混合使用有点棘手。就个人而言,我发现使用 Razor @function 或 Razor custom @helper 总是更容易将这两个人分开。

    这是一个简单的例子:

    <script type="text/javascript">
        function btn_clicked() {
            @generateMyJavaScript()
        }
    </script>
    
    <a href="javascript:void(0)" onclick='btn_clicked()'>Click on me</a>
    
    @functions {
        private MvcHtmlString generateMyJavaScript()
        {
            string jsBuilder = string.Empty;
            if (true)
                jsBuilder = "alert('Hey!');";
            return MvcHtmlString.Create(jsBuilder);
        }
    }
    

    【讨论】: