c# - 当我在 if 子句中放置一个关闭的 div 标签时,Razor 会提示

标签 c# asp.net-mvc razor

我正在尝试使用 Razor 模板来执行此操作:

@if(isNew)
{
   <div class="new">
}

...


@if(isNew)
{
   </div>
}

错误是:

cannot resolve the symbol 'div'

Razor 不喜欢 IF 子句中的结束 div 标记,我怎样才能让它工作?我必须使用转义吗?

最佳答案

Razor 不喜欢像这样拆分开始/结束标记,因为它无法正确解析 HTML,因此您必须将它们转义为纯文本:

@if(isNew)
{
   @:<div class="new">
}

...


@if(isNew)
{
   @:</div>
}    

更传统的方法是在 div 中重复标记(使用部分或其他方式)——哪种方法更可取,我想说,取决于条件 div 之间标记的性质:

@if(isNew)
{
    <div class="new">
        <!-- some markup or partial view -->
    </div>
}
else
{
    <!-- some markup or partial view -->
}

如果出现以下情况,我更喜欢这种方法:

  1. 包含的标记可以有用地包含在部分中,以便可以在其他地方重复使用。
  2. 条件包装标记不止几行,此时转义标记变得困惑。

我还应该添加使用辅助方法的选项:

@helper MainMarkup()
{
    <!-- some markup or partial view -->
}

@if(isNew)
{
    <div class="new">
        @MainMarkup()
    </div>
}
else
{
    @MainMarkup()
}

如果您想使用上面的第二个选项但要避免重复标记或嵌套太多部分(特别是如果此标记仅与此 View 相关时),这将很有用。

关于c# - 当我在 if 子句中放置一个关闭的 div 标签时,Razor 会提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338335/

相关文章:

C#,阻塞集合 : How to wait until collection has less than N items

c# - 文本框已聚焦,但在我单击之前无法键入 - XAML/C#/WPF

javascript - 上传文件时向 Jquery.Ajax post 添加数据?

ASP.NET MVC 4, "WebSecurity.InitializeDatabaseConnection"方法只能调用一次

c# - 以编程方式将 XPS 文件打印到物理打印机

c# - 在 Windsor CaSTLe 中向组件依赖项添加符号

asp.net-mvc - 如何将Azure ACS与本地(自定义)STS集成?

c# - 继承和强类型 View

asp.net-core - Razor View 未生成 Razor 页面的 href

javascript - 字符 '+'在base64编码数据中转换为+