web-dev-qa-db-fra.com

Implémentation d'une instruction switch dans une page CSHTML

J'essaie de faire quelque chose de différent. J'ai une vue qui contient un identifiant. En fonction de la valeur de l'ID, je souhaite modifier mon en-tête qui apparaît. Quelque chose comme:

@{ switch id
   case "test": @;<h1>Test Site</h1>
   case "prod": @:<h1>Prod Site</h1>
   break;
}

J'ai pas mal de conditions de cas, donc je pensais que l'utilisation de cas serait la meilleure. Quelqu'un peut-il suggérer comment je peux le faire et le faire fonctionner? Je reçois beaucoup d'erreurs de syntaxe, donc je pense que ce n'est peut-être pas bien codé.

51
Marianne

Votre commutateur doit être complètement enfermé dans un bloc et il doit être "cassé" correctement:

// Use the @{ } block and put all of your code in it
@{
    switch(id)
    {
        case "test":
            // Use the text block below to separate html elements from code
            <text>
                <h1>Test Site</h1>
            </text>
            break;  // Always break each case
        case "prod":
            <text>
                <h1>Prod Site</h1>
            </text>
            break;
        default:
            <text>
                <h1>WTF Site</h1>
            </text>
            break;                   
    }
}

Parce que le <h1> les balises sont des blocs html inclus, vous n'avez peut-être pas besoin du <text> blocs de séparation. C'est juste mon habitude de les inclure.

123
Joel Etherton
@switch (id)
{
    case "test": <h1>Test Site</h1>
    break;
    case "prod": <h1>Prod Site</h1>
    break;
}

Il n'est pas nécessaire de placer l'intégralité de l'instruction switch dans un @{} block, (contrairement au post de Joel Etherton)

Vos erreurs sont essentiellement des erreurs de syntaxe normales et n'ont rien à voir avec le rasoir;

  1. la variable n'était pas entre parenthèses

  2. le corps de l'interrupteur n'était pas entre parenthèses

  3. pas de "pause" après la première déclaration.

44
yoel halb

Cela ne répond pas à votre question, comme indiqué par le titre de la question, mais cela résout le problème que vous avez décrit dans le corps de la question.

Utilisez une classe de modèle de vue comme modèle de vue et ajoutez une méthode qui inclut l'instruction switch. Ensuite, appelez simplement la méthode depuis la vue via @Model.MethodWithSwitchStatement(). [Le id peut être enregistré dans l'objet de modèle de vue.]

2
Kenny Evitt