MVC Razor 3 RC语法:错误或用户错误?

时间:2010-11-10 19:36:59

标签: asp.net-mvc razor

我想这很明显,但在我提交错误报告之前,我想知道我做错了。我使用ASP.NET MVC3 RC,使用Razor:

<div class="miniProfile">
    Joined: @FormatTime(Model.Joined)<br />
    @if (!String.IsNullOrWhiteSpace(Model.Location)) {
        Location: @Model.Location<br />
    }
    Posts: @Model.PostCount<br />
    @Html.ActionLink("Full Profile", "ViewProfile", new { id = Model.UserID }, new { target = "_blank" }) | 
    @Html.ActionLink("Send Private Message", "SendNew", "PrivateMessages", new { id = Model.UserID }) | 
    @Html.ActionLink("Send E-mail", "Send", "Email", new { id = Model.UserID })
    @if (!String.IsNullOrWhiteSpace(Model.Web)) {
        | <a href="@Model.Web" target="_blank">Visit user Web site: @Model.Web</a>
    }
</div>

它在“位置”和最后一个条件的管道中窒息。如果我插入一些&lt; text&gt;标签,它的工作原理如下:

<div class="miniProfile">
    Joined: @FormatTime(Model.Joined)<br />
    @if (!String.IsNullOrWhiteSpace(Model.Location)) {
        <text>Location: </text>@Model.Location<br />
    }
    Posts: @Model.PostCount<br />
    @Html.ActionLink("Full Profile", "ViewProfile", new { id = Model.UserID }, new { target = "_blank" }) | 
    @Html.ActionLink("Send Private Message", "SendNew", "PrivateMessages", new { id = Model.UserID }) | 
    @Html.ActionLink("Send E-mail", "Send", "Email", new { id = Model.UserID })
    @if (!String.IsNullOrWhiteSpace(Model.Web)) {
        <text>| </text><a href="@Model.Web" target="_blank">Visit user Web site: @Model.Web</a>
    }
</div>

尽管有一些试验和错误,但我无法弄清楚我在做什么是顽皮的。建议?

2 个答案:

答案 0 :(得分:7)

您的标记应如下

<div class="miniProfile">
  Joined: @FormatTime(Model.Joined)<br />
  @if (!String.IsNullOrWhiteSpace(Model.Location)) {
    <text>Location: @Model.Location<br /></text>
  }
  Posts: @Model.PostCount<br />
  @Html.ActionLink("Full Profile", "ViewProfile", new { id = Model.UserID }, new { target = "_blank" }) |
  @Html.ActionLink("Send Private Message", "SendNew", "PrivateMessages", new { id = Model.UserID }) |
  @Html.ActionLink("Send E-mail", "Send", "Email", new { id = Model.UserID })
  @if (!String.IsNullOrWhiteSpace(Model.Web)) {
    <text>| <a href="@Model.Web" target="_blank">Visit user Web site: @Model.Web</a></text>
  }
</div>

如果您有@if语句,那么卷曲之后的任何内容仍被视为“代码”,因此您需要使用<text>标记或{{1}来突破它语法。

这种行为的原因是,无论如何你经常会在条件中嵌套某种标记,在这种情况下,事情就会起作用:

@:

当您不希望将条件的内容包装在任何标记中时,@if(condition) { <div>Some content</div> } 标记适用于这种情况。

答案 1 :(得分:2)

你不能只在代码块中包含纯文本内容,Razor引擎无法弄清楚它是代码还是标记。这就是<text>标签的含义,以消除歧义。你是说<text>标签使其有效(这是答案,没有更多的事要做),或者它仍然无法与<text>标签一起使用(尝试包装整个{{} 1}}阻止if标记?