2016-04-09 7 views
2

So habe ich den folgenden Code in .net Razor:Razor: Ende der foreach-Block-Rendering nach nicht if-Anweisung

<div id="menu_left" class="menu_item"> 

    @foreach (var mainMenuItem in Model) 
      { 

        string link =""; 
        string nameLower = @mainMenuItem.ItemName.ToLower(); 
        if (mainMenuItem.SubItem.Count() > 0) 
            { 
            link +="javascript:submenu('"; 
            link += nameLower + "_dropdown"; 
            link += "', 'dropdown_menu');"; 
            } 
        else 
            { 
             link = mainMenuItem.Link; 
            } 
         } 

       <a href="@link" class="menu_a"> 
        <img src="@mainMenuItem.Image" class="menu_link" id="@mainMenuItem.ItemName.ToLower()" /> 
       </a> 

      } 

    </div> 

aber wenn ich versuche, es zu laufen, macht der .net-Compiler die Zeile am Ende der if-Anweisung als hTML-wörtliche anstatt sie als Code kompiliert, wie durch den folgenden Abschnitt aus der Zusammenstellung Quelle angezeigt wird: ich habe Einwickeln

Line 145: WriteLiteral(@"       else 
Line 146:          { 
Line 147:            link = mainMenuItem.Link; 
Line 148:          } 
Line 149:       } 

die ganze Sache in einem @ versucht {} Code-Block, so dass es weiß, dass es Code ist, aber dann scheint der Compiler den Block auf der falschen geschweiften Klammer zu beenden, wie das o ne am Ende der foreach-Schleife.

Ich habe andere Leute auf SO gesehen, die das gleiche Problem haben, wenn es html innerhalb der 'if' Anweisung gibt, aber es gibt kein HTML in diesem Block.

Wie bekomme ich den Rest meines Codes zum Rendern als Code?

Antwort

2

Remove @ von

@mainMenuItem.ItemName.ToLower(); 

Sie brauchen nur @ Symbol, wenn Sie C# Code beginnen, und wenn Sie es mit html mischen.

Zum Beispiel in diesem Fall werden Sie @ Symbol benötigen nameLower des Wert zu machen:

@foreach (var mainMenuItem in Model) 
{ 

    string link = ""; 
    string nameLower = mainMenuItem.ItemName.ToLower(); 

    <div> 
     some html 
     @nameLower 
    </div> 
} 
+0

Oh, duh, das war es! Danke, ich werde diese Antwort annehmen, sobald SO es mir erlaubt. – jimboweb