Asp.net 为什么';代码块中的Razor语法是否正确地取消引用?

Asp.net 为什么';代码块中的Razor语法是否正确地取消引用?,asp.net,razor,Asp.net,Razor,我在Razor视图中有以下标记: @Model.HeadingText 这非常有效,并最终呈现如下内容: @if (!string.IsNullOrEmpty(Model.HeadingName)) { <dynamic type="@Model.HeadingName"> @Model.HeadingText </dynamic> } 联系我们 但是,如果要检查null,它将无法呈现结束标记: @if(!string.IsNul

我在Razor视图中有以下标记:


@Model.HeadingText
这非常有效,并最终呈现如下内容:

@if (!string.IsNullOrEmpty(Model.HeadingName))
{
    <dynamic type="@Model.HeadingName">
        @Model.HeadingText
    </dynamic>
}

联系我们
但是,如果要检查null,它将无法呈现结束标记:

@if(!string.IsNullOrEmpty(Model.HeadingName))
{
@Model.HeadingText
}
出于某种原因,这将导致以下输出:


联系我们
有人知道如何取消对闭合块的引用,以便它正确地渲染吗

我尝试过但没有成功的事情
  • 使用
    @:
    启动该行
  • 在结束标记中添加空格

一种方法是使用
Html.Raw()
输出文本,尽管它在视图中看起来很难看,intellisense可能会对“缺少”的结束标记犹豫不决:

@if(!string.IsNullOrEmpty(Model.HeadingName))
{
@Model.HeadingText
@Html.Raw($“”)
}

我也无法让它正确地取消引用。不幸的是,为了转换回HTML,Razor希望看到纯文本的HTML标记名。虽然可以通过这种方式向标记添加属性,但是

…为什么不定制一下,那么你的剃须刀就会变成这样:

@if (!string.IsNullOrEmpty(Model.HeadingName))
{
    <dynamic type="@Model.HeadingName">
        @Model.HeadingText
    </dynamic>
}
然后,为了使DynamicTagHelper类可用于所有Razor视图,您需要将
addTagHelper
指令添加到views/\u ViewImports.cshtml文件中:

@addTagHelper *, MyNamespace
(确保用实际名称空间替换
MyNamespace

也许对你所做的事情来说有些过分,但至少这会激励你