2016-05-17 10 views
-1

Ich habe den folgenden Code in einer Ansicht. Nachdem ich @if (Model.Error) hinzugefügt habe, beschwert sich der Compiler jetzt, dass ein Fehler aufgetreten ist, da der Parameter, der Aufruf und der Afterinit nicht geschlossen sind. Ich habe versucht, Text-Tags ohne Erfolg einzusetzen. Die Sache ist, dass der Code in der Ansicht eigentlich als reguläres Rasierskript gut läuft, wenn ich versuche, die Ansicht vorkompilieren, bekomme ich einen Buildfehler.Verschachtelte Tags in @if-Anweisung nicht erkannt

@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> 

Hier ein Bild der Fehler ist, wenn das hilft:

Razor syntax error

+0

Benötigen Sie technisch das '@' vor 'Model.ErrorMessage', da Sie bereits im Bereich des' @ if' liegen? –

+0

Ja, wahrscheinlich überflüssig, aber das ist nicht markiert, guter Fang. Wie Sie sehen können, habe ich es bereits in der Antwort unten herausgenommen. – aggaton

Antwort

0

Anscheinend haben Sie Ihre Literale so etwas wie diese Maskerade, es ist ein Spiel von Whack-a-Mole welche diejenigen Bedürfnisse es und was nicht, wirklich seltsames und zufälliges Verhalten.

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

Ich fand auch, dass einige Tags wie auto-geschlossen sind und durch das End-Tag zu entfernen minimiert es Verwirrung und @: sind in vielen Fällen nicht erforderlich.

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