@if语句中的嵌套标记无法识别

时间:2016-05-17 19:02:36

标签: asp.net-mvc razor

我在视图中有以下代码。在我添加@if(Model.Error)之后,编译器现在抱怨错误,因为param,call和afterinit没有关闭。我试过放入文本标签无济于事。事实上,代码实际上在视图中作为常规剃刀脚本运行得很好,当我尝试预编译视图时,我得到了构建错误。

@using Core.UI;
@using Core.ViewModels.SQLServer;
@model LinkedServerListData
@{
    Response.ContentType = "text/xml";
    Layout = null;
}
<rows>
    <head>
            @if (Model.HasError)
            {
                <afterinit>
                    <call command="SetServerError">
                        <param>@(Model.ErrorMessage)</param>
                    </call>
                </afterinit>
            }
        <settings>
            <colwidth>%</colwidth>
        </settings>
        <column width="100" align="left" sort="server" type="ro" hidden="false" id="Server">
            <![CDATA[
            <div style="@Html.Raw(Grid.HEADER_STYLE_LEFT)">Linked Server Name</div>]]>
        </column>
    </head>
    @foreach (string sServer in Model.Servers)
    {
        <row id="@(Guid.NewGuid().ToString())">
            <cell><![CDATA[@Html.Raw(sServer)]]></cell>
        </row>
    }
</rows>

如果有帮助,这是错误的图像:

Razor syntax error

1 个答案:

答案 0 :(得分:0)

显然你必须将你的文字伪装成这样的东西,这是一个需要它的游戏,并不是真正奇怪和随意的行为。

    @:<afterInit>
        @:<call command="SetServerError">
            @:<param>Model.ErrorMessage </param>
        @:</call>
    @:</afterInit>

我还发现一些标签是自动关闭的,通过删除结束标签可以最大限度地减少混淆,在许多情况下不需要@:

    @if (Model.GridFilterFields.Length > 0)
    {
        <call command="SetFilters">
             <param>@MvcHtmlString.Create(Model.GridFilterFields)
             <param>@MvcHtmlString.Create(Model.GridFilterValues)
        </call>
    }