3 votes

Quel est la portée des variables dans Razor MVC 3

Je rencontre des problèmes de portée de variable pour myClient dans mon code Razor. Je suis sûr que la solution est simple. En gros, je le référence dans un bloc séparé @{} ce qui pourrait causer le problème, mais il semble que si je ne le fais pas, j'obtiens le code if..{} dans le HTML.

@{
int i = 0;
foreach (var item in Model.Clients)
    {
        Int32 myId = Convert.ToInt32(item.DBID);
        var myClient = db.Client.Where(c => c.Id == myId).First();

        }

            @string.Format(
                "{0} {1} {2}",
                myClient.Title,
                myClient.Initials,
                myClient.LastName)

                @{
                    if (myClient.Type!="Primary")
                    {
                        @Html.ActionLink(
                            "Delete", 
                            "Delete", 
                            "ClientBackground", 
                            new { id=item.ID }, null)
                    }
                 }
            Mon code ne peut pas référencer myClient.Type. Si je supprime les balises @{} qui l'entourent, alors j'obtiens le code c# dans le HTML.Quelque chose de simple je le sais, mais je n'arrive pas à le voir.Toute aide serait grandement appréciée.EDIT : Tableau fermé.

2voto

Dave A Points 13355

Essayez ceci :

@string.Format("{0} {1} {2}",myClient.Title,myClient.Initials,myClient.LastName)
                                    @if (myClient.Type!="Primary")
                                        {
                                        @Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null)
                                }

              @{int i = 0;}

              @foreach (var item in Model.Clients)
                  {
                      Int32 myId = Convert.ToInt32(item.DBID);
                      var myClient = db.Client.Where(c => c.Id == myId).First();

              }

J'ai fait de nombreuses suppositions sur le formatage. Important, j'ai mis votre affectation int dans son propre bloc. J'ai mis l'ouverture et la fermeture des 's et des 's pour correspondre et les ai placés en dehors des blocs @if facultatifs. Mais cette version compilera.

1voto

webdeveloper Points 8205

Syntaxe étrange ici :

@{if (myClient.Type!="Primary")
     {
          @Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null)
     }
 }

Pourquoi pas :

@if (myClient.Type!="Primary")
{
   @Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null)
}

Ajouté:

Votre code mis à jour a un balisage html invalide, il devrait ressembler à ceci :

        @string.Format("{0} {1} {2}", myClient.Title, myClient.Initials, myClient.LastName)
        @if (myClient.Type!="Primary")
        {
            @Html.ActionLink("Delete", "Delete", "ClientBackground", new { id=item.ID }, null)
        }

@{
int i = 0;
foreach (var item in Model.Clients)
{
    Int32 myId = Convert.ToInt32(item.DBID);
    var myClient = db.Client.Where(c => c.Id == myId).First();

}

Le tableau n'était pas fermé et vous aviez ouvert une balise

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X