MVC/Razor: 条件嵌套的HTML标签

20

我希望有一个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>
}

谢谢。

1个回答

41
以下内容可能使用 @: 运算符起作用。当您处于代码块内部时,无论是因为控制结构(如下面给出的示例)还是因为您明确定义了一个,您都可以通过在 @ 字符前加上 :(冒号)字符来输出纯文本。
<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>

谢谢,我不知道 @: 运算符! - Sharpac
非常感谢 @Darin Dimitrov。 - Suhani Mody
我也完美地使用了它。谢谢! - Gonzalo Méndez
1
我非常感激你,Darin,你是我的英雄 :) 你救了我一天的工作,如果可以的话,我希望能给你十个赞,并且有一个问题:@: 和 @Html.Raw() 之间有什么不同吗? - QMaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接