2010-11-23 6 views

Répondre

86

Pour utiliser les méthodes génériques dont vous avez besoin pour échapper à l'expression

@(Html.Test<ISQL>().Nand()) 
+0

Merci! Est-ce que l'équipe MVC l'a mentionné quelque part? Je ne me souviens pas d'avoir lu ça ... – kidoman

+0

Je suis sûr que c'est là-bas quelque part. – marcind

+3

Ah! Juste vu votre profil! Vous faites partie de l'équipe ASP.NET MVC! Doux! – kidoman

6

Je comprends que cette « réponse » est un peu en retard et la question a évidemment été satisfaisante (et bien) répondre. Cependant, pour tous les futurs visiteurs de cette page, si vous recherchez un guide de référence plus complet, il y a le MS introduction to Razor syntax ainsi que le très utile article de blog de Phil Haack, Razor quick reference.

13

Je viens de trouver cette question quand je cherchais cette "même erreur" lors de la mise à niveau mvc.

J'ai eu:

ne fonctionne pas:

@{ 
    ViewBag.Title = "Something " + @Model.Title; 
    var something = (IEnumerable<SelectListItem>)ViewBag.Options;  
} 

Apparemment, la syntaxe est allé plus stricte, et que vous êtes à l'intérieur d'un bloc @ {}, vous ne devez pas ajouter @ avant Modèle. Titre sur l'exemple. Mais l'erreur sur l'éditeur de code pointait vers le générique et ça me rendait fou.

Cela fonctionne très bien s'il n'y a pas de <> dans le code, mais juste de supprimer le @ de Model.Title résoudre le problème.

Travaux:

@{ 
    ViewBag.Title = "Something " + Model.Title; 
    var something = (IEnumerable<SelectListItem>)ViewBag.Options;  
} 

Hope this helps à tout le monde

+0

Je suis devenu fou aussi sur celui-ci! "Le bloc de code manque un caractère de fermeture}". – SandRock

+1

Merci. Vraiment aidé - un précédent @ causait des problèmes sur la prochaine déclaration, pas quelque chose que vous pointeriez directement. – Darius

2

Il est sur le caractère @, cet exemple fonctionne mise à niveau avant

@{ 
    string @class = [email protected]; 
    IDictionary<string, object> htmlAttributes = new Dictionary<string, object>(); 
} 

Après la mise à niveau, il doit être séparé en deux blocs

@{ string @class = [email protected]; } 
@{ IDictionary<string, object> attrs = new Dictionary<string, object>(); } 
2

J'ai eu un cas étrange quand j'ai eu plusieurs affectations dans un @{ ... } bock.

@{ 
    // ... other assignments (without error) 
    List<string> stringList = new List<string>() // ERROR MESSAGE HERE 
} 

Qu'est-ce que j'ai fait, il y avait toujours des erreurs, comme ceci:

Utilisation du type générique 'Liste' nécessite un des arguments de type

La solution: I mettre la ligne d'affectation à deuxième@{ ... }bock.

@{ 
    // ... other assignments 
} 
@{ 
    List<string> stringList = new List<string>() // WORKS 
}