web-dev-qa-db-de.com

C # if-Anweisung innerhalb von Javascript, Razor/MVC3

Ok, ich versuche also, eine "if" -Anweisung in meinem Javascript zu verwenden. Abhängig von einem booleschen Modell in meinem Modell sollte eine Funktion HTML oder eine leere Zeichenfolge zurückgeben. Dies ist im Grunde das, was ich tun möchte:

function getSomeHtml() {
var myHtml = '';
@if(Model.UseSomeNiceHtml)
{
<text> 
myHtml += '<div> <p class="label">Whatever</p></div>'; 
</text>
}
return myHtml;
}

Ein ähnlicher Code funktioniert sehr gut, wenn eine foreach-Schleife verwendet wird (im Wesentlichen wenn foreach im obigen Beispiel ersetzt wird). Mit der if-Anweisung erhalte ich die Fehlermeldung "Encountered end tag" text "ohne übereinstimmendes start-Tag. Sind Ihre StartEnd-Tags richtig ausgewogen?" - /. Wenn ich die <text>-Tags entferne, erhalte ich die Fehlermeldung "Zu viele Zeichen im Zeichenliteral" .

Könnte mich jemand in die richtige Richtung weisen?

Vielen Dank! :)

18
Erik Kinding

Ok, zuerst: danke für deine Eingabe, es hat mich zum Nachdenken gebracht. Schließlich fand ich die Lösung und das Problem war ein "/" in einem schließenden HTML-Tag. Ohne diese Tags sind meine Tags ausgeflippt. Wie auch immer, ich dachte mir, ich würde mit Ihnen teilen, wie mein fertiger Code aussieht. Ich denke, es kann als Beispiel dienen, wie man sowohl C # -Schleifen als auch if-Anweisungen in einer Javascript-Funktion verwendet.

function getSubActivitiesHtml(participantId) {
var html = "";
@{
if(Model.UseSubActivities)
{
<text>
html += "<div class=\"textinput req\"><div class=\"checkbox req\">";
</text>

foreach (var subActivity in Model.SubActivities)
{
<text> 
html += "<p><input id=\"activity_" + participantId + "[email protected](subActivity.Id)\" name=\"Participants[" + participantId + "].SelectedSubActivities\" value=\"@(subActivity.Id)\" type=\"checkbox\" />";
html += "<label for=\"activity_" + participantId + "[email protected](subActivity.Id)\">@(subActivity.Name)</label></p>";
</text>
}

<text>
html += "<\/div><p class=\"label\">Delaktiviteter</p><\/div>";
</text>  
}
}

return html;
}

Beachten Sie, wie die schließenden HTML-Tags escape sind ...

9
Erik Kinding

Ok, hier ist etwas, was für mich funktioniert. Gerade jetzt getestet.

function getSomeHtml() {
    var myHtml = '';
    @{
        if (Model.UseSomeNiceHtml)
        {
            <text> 
            myHtml += '<div> <p class="label">Whatever</p></div>'; 
            </text>
        }
    }
    return myHtml;
}

Ich habe einen zusätzlichen Satz von {} hinzugefügt.

30
AndersDaniel

Das funktioniert auch.

function getSomeHtml() {
    var myHtml = '';
    if('@Model.UseSomeNiceHtml' === '@true')
    {
         myHtml += '<div> <p class="label">Whatever</p></div>'; 
    }
    return myHtml;
}
0
RayLoveless

Versuche dies:

  function getSomeHtml() {
    @{
      var myHtml = "";
      if(Model.UseSomeNiceHtml)
      {
        myHtml += "<div> <p class='label'>Whatever</p></div>";
      }
    }
    return "@myHtml";
  }
0
Zaid Masud

versuchen Sie, die <text>-Tags zu entfernen, oder fügen Sie sie in die myHtml += '';-Anweisung ein

0
trembon