web-dev-qa-db-fra.com

C # if déclaration dans Javascript, Razor/MVC3

Ok, j'essaie donc d'utiliser une déclaration "if" dans mon javascript. Selon le booléen de mon modèle, une fonction doit renvoyer du code HTML ou une chaîne vide. C'est fondamentalement ce que je veux faire:

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

Un code similaire fonctionne vraiment bien avec une boucle foreach (en remplaçant fondamentalement if par foreach dans l'exemple ci-dessus). Avec l'instruction if, j'obtiens l'erreur "Balise de fin rencontrée" texte "sans balise de début correspondante. Vos balises de début/fin sont-elles équilibrées correctement?" . Lorsque je supprime les balises <text>, je reçois le message d'erreur "Trop de caractères dans le caractère littéral" .

Quelqu'un pourrait-il me diriger dans la bonne direction?

Je vous remercie! :)

18
Erik Kinding

Ok, d'abord: merci pour votre contribution, ça m'a fait réfléchir. Finalement, j'ai trouvé la solution et le problème était un "/" non échappé dans une balise html de fermeture. Avec ces balises sans échappatoire, mes balises ont paniqué. Quoi qu'il en soit, j'ai pensé partager avec vous à quoi ressemble mon code fini. Je suppose que cela peut servir d’exemple sur la façon d’utiliser les boucles C # et les instructions if dans une fonction javascript.

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 + "_@(subActivity.Id)\" name=\"Participants[" + participantId + "].SelectedSubActivities\" value=\"@(subActivity.Id)\" type=\"checkbox\" />";
html += "<label for=\"activity_" + participantId + "_@(subActivity.Id)\">@(subActivity.Name)</label></p>";
</text>
}

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

return html;
}

Notez comment les balises html fermantes sont échappées ...

9
Erik Kinding

Ok, voici quelque chose qui fonctionne pour moi. Testé tout à l'heure.

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

J'ai ajouté un ensemble supplémentaire de {}.

30
AndersDaniel

Cela fonctionne aussi.

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

Essaye ça:

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

essayez de supprimer les balises <text> ou de les insérer dans l'instruction myHtml += '';

0
trembon