MVC3 Razor视图中的文本字面量问题

18

在这个标记中,为什么需要使用<text>标签来包含管道符号'|'? 这显然远远超出了ActionLink方法的范畴。

@foreach (var item in Model.DetailItem.PlannedResources)
{ 
    <tr>
        <td>
            @if (Model.ViewMode == ViewMode.Edit)
            {
                @Html.ActionLink("Edit", "Edit", new { id = item.PlannedResourceId }) <text>|</text>
                @Html.ActionLink("Delete", "Delete", new {id = item.PlannedResourceId})                                                                     
            }
            @Html.ActionLink("Details", "Details", new { id = item.PlannedResourceId })
        </td>
        <td>
            | @item.ResourceType.Name
        </td>
    </tr>
}
如果我不使用它,我会收到错误信息CS1525:无效的表达式项“|”,但第二个“|”却可以顺利通过。
2个回答

23

这是因为当你在一个带有{}的语句中时,只有HTML标签被视为字面量,其他所有内容都是服务器端脚本。因此,你需要使用标准的HTML标签,例如<div><span>等,或者如果你想使用字面量,请使用特殊的<text>标签,这不会输出到响应中。


有趣的是,为什么我的其他 | 字符(请参见编辑)在内部 {} 之外,但仍在循环的外部 {} 中。是否由于位于 HTML 标记内而被转义了? - ProfK
@ProfK,我不明白。你说的内部和外部的 {} 是什么?还有哪些编辑? - Darin Dimitrov
1
@ProfK,抱歉,现在我看到了您的编辑。在外部的 {} 中,| 字符位于标记内:<td>,所以它可以工作,而在内部则没有标记:你有{},一些服务器端帮助程序 @Html.ActionLink 直接跟随着 |,没有标记,当没有标记时它被视为服务器端。 - Darin Dimitrov

20

如果您的文字跨越多行,可以使用<text>标签。

<text>您的文字在这里...
到第二行。</text>

或者,如果您只想输出管道字符,请使用@:指令来指定文本,
因此@:|将输出|,错误消息将消失。


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