Asp.net mvc 无法识别@if语句中的嵌套标记
我在视图中有以下代码。在我添加@if(Model.Error)之后,编译器现在会抱怨有错误,因为param、call和afterinit没有关闭。我试着输入文本标签,但没有用。问题是,代码实际上在视图中作为常规razor脚本运行得很好,当我尝试预编译视图时,我得到一个构建错误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
@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
的范围内?是的,可能是多余的,但是没有标记,但是捕捉得很好。正如您所看到的,我已经在下面的答案中删除了它。