MVC/Razor:条件嵌套的html标记

Sha*_*pac 15 html asp.net-mvc razor

我想要一个条件("myBool")为真的html代码:

<div>
  <fieldset>
    <legend>
      @sometext
    </legend>
    ... other stuffs
  </fieldset>
<div>
Run Code Online (Sandbox Code Playgroud)

当这是假的时候这个:

<div>
  <b>
    @sometext
  </b>
  ... other stuffs
<div>
Run Code Online (Sandbox Code Playgroud)

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

<div>
@if(myBool)
{
  <fieldset>
    <legend>
}
else
{
  <b>
}
@sometext
if (myBool)
{
  </legend>
}
else
{
  </b>
}
...other stuff
if (myBool)
{
  </fieldset>
}
</div>
Run Code Online (Sandbox Code Playgroud)

但我得到编译错误.

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

@if(myBool)
{
  <div>
    <fieldset>
      <legend>
        @sometext
      </legend>
      ... other stuffs
    </fieldset>
  <div>
}
else
{
  <div>
    <b>
      @sometext
    </b>
    ... other stuffs
  <div>
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Dar*_*rov 35

以下可能使用@:运算符.当你在一个代码块里面时,或者是因为一个控制结构(比如下面给出的例子)或者你已经明确定义了一个,你可以输出纯文本,前缀是@ -character后跟一个:(冒号)字符.

<div>
    @if (someCondition)
    {
        @:<fieldset>
            @:<legend>
    }
    else
    {
        @:<b>
    }

    @sometext

    if (someCondition)
    {
        @:</legend>
    }
    else
    {
        @:</b>
    }

    ... other stuffs

    @if (someCondition)
    {
        @:</fieldset>
    }
</div>
Run Code Online (Sandbox Code Playgroud)

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

<div>
    @Html.Raw(someCondition ? "<fieldset><legend>" : "<b>")
    @sometext
    @Html.Raw(someCondition ? "</legend>" : "</b>")

    ... other stuffs  

    @if (someCondition)
    {
        @:</fieldset>
    }  
</div>
Run Code Online (Sandbox Code Playgroud)