Asp.net mvc 无法识别@if语句中的嵌套标记

Asp.net mvc 无法识别@if语句中的嵌套标记,asp.net-mvc,razor,Asp.net Mvc,Razor,我在视图中有以下代码。在我添加@if(Model.Error)之后,编译器现在会抱怨有错误,因为param、call和afterinit没有关闭。我试着输入文本标签,但没有用。问题是,代码实际上在视图中作为常规razor脚本运行得很好,当我尝试预编译视图时,我得到一个构建错误 @using Core.UI; @using Core.ViewModels.SQLServer; @model LinkedServerListData @{ Response.ContentType = "te

我在视图中有以下代码。在我添加@if(Model.Error)之后,编译器现在会抱怨有错误,因为param、call和afterinit没有关闭。我试着输入文本标签,但没有用。问题是,代码实际上在视图中作为常规razor脚本运行得很好,当我尝试预编译视图时,我得到一个构建错误

@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>
@使用Core.UI;
@使用Core.ViewModels.SQLServer;
@模型LinkedServerListData
@{
Response.ContentType=“text/xml”;
布局=空;
}
@if(Model.HasError)
{

显然,你必须像这样伪装你的文字,这是一个“打鼹鼠”的游戏,谁需要它,谁不需要,真是奇怪和随机的行为

    @:<afterInit>
        @:<call command="SetServerError">
            @:<param>Model.ErrorMessage </param>
        @:</call>
    @:</afterInit>
@:
@:
@:Model.ErrorMessage
@:
@:
我还发现一些标签,如自动关闭,通过删除结束标签,它最大限度地减少了混乱和@:在许多情况下不需要

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

从技术上讲,您是否需要
@
模型前面。ErrorMessage
,因为您已经在
@if
的范围内?是的,可能是多余的,但是没有标记,但是捕捉得很好。正如您所看到的,我已经在下面的答案中删除了它。