【问题标题】:MVC/Razor : Conditional nested html tagMVC/Razor:条件嵌套 html 标签
【发布时间】:2023-03-17 11:53:01
【问题描述】:

我想要这个 html 代码,其中条件(“myBool”)为真:

<div>
  <fieldset>
    <legend>
      @sometext
    </legend>
    ... other stuffs
  </fieldset>
<div>

这个是假的:

<div>
  <b>
    @sometext
  </b>
  ... other stuffs
<div>

我不想写两次相同的代码(“其他东西”),所以我尝试了这个:

<div>
@if(myBool)
{
  <fieldset>
    <legend>
}
else
{
  <b>
}
@sometext
if (myBool)
{
  </legend>
}
else
{
  </b>
}
...other stuff
if (myBool)
{
  </fieldset>
}
</div>

但我得到编译错误。

你知道我怎么能做我想做的事而不必做这样的事情吗:

@if(myBool)
{
  <div>
    <fieldset>
      <legend>
        @sometext
      </legend>
      ... other stuffs
    </fieldset>
  <div>
}
else
{
  <div>
    <b>
      @sometext
    </b>
    ... other stuffs
  <div>
}

谢谢。

【问题讨论】:

    标签: html asp.net-mvc razor


    【解决方案1】:

    使用@: 运算符可能会起作用。 当您在代码块中时,无论是因为控制结构(如下面给出的示例)还是因为您明确定义了一个,您可以通过在前面加上 @-character 后跟 :(冒号)来输出纯文本字符。

    <div>
        @if (someCondition)
        {
            @:<fieldset>
                @:<legend>
        }
        else
        {
            @:<b>
        }
    
        @sometext
    
        if (someCondition)
        {
            @:</legend>
        }
        else
        {
            @:</b>
        }
    
        ... other stuffs
    
        @if (someCondition)
        {
            @:</fieldset>
        }
    </div>
    

    或者您也可以尝试以下方法:

    <div>
        @Html.Raw(someCondition ? "<fieldset><legend>" : "<b>")
        @sometext
        @Html.Raw(someCondition ? "</legend>" : "</b>")
    
        ... other stuffs  
    
        @if (someCondition)
        {
            @:</fieldset>
        }  
    </div>
    

    【讨论】:

    • 谢谢我不知道@: 运算符!
    • 非常感谢@Darin Dimitrov
    • 对我来说也很完美。谢谢!
    • 我真的很感谢你,达林,你是我的英雄 :) 拯救了我的一天,如果可以的话,我希望点 +10,还有一个问题:@: 和 @Html.Raw( ) ?