2011-11-06 1 views
2

J'ai un code qui échoue en raison d'une erreur:Confus par la portée des variables lors du mélange Javascript et Razor dans ASP.NET MVC3

The name 'foo' does not exist in the current context 

Il est dû à un problème de portée des variables que je suis confus au sujet. Je pensais que cela devrait fonctionner:

var foo = "<ul>"; 

@for (int i = 0; i < 10; i++) 
{ 
    foo += "<li>bar</li>"; 
} 
foo += "</ul>"; 

La syntaxe Razor devrait invoquer la boucle et la foo variable serait toujours portée en termes de javascript car au moment où le navigateur interprète le code, la syntaxe de rasoir est essentiellement invisible.

Cependant, le message d'erreur que je reçois provient du compilateur, donc le C# essaie de faire référence à foo. Qu'est-ce qui me manque et comment puis-je modifier le code pour que je reçoive le code javascript approprié afin qu'il concatène <li>bar</li> comme je tente de le faire?

Répondre

5

Le contenu d'un bloc de code, tel qu'une boucle for, est supposé être du code côté serveur.

Vous devez indiquer explicitement à Razor que c'est le balisage using the <text> special tag.

+0

Merci! Exactement ce que je cherchais à la fois le préfixe '' et le préfixe '@:'. – TMC

0
@{ 
var foo = "<ul>"; 

for (int i = 0; i < 10; i++) 
{ 
    foo += "<li>bar</li>"; 
} 
foo += "</ul>"; 

} 

ou cette

@var foo = "<ul>"; 

@for (int i = 0; i < 10; i++) 
{ 
    foo += "<li>bar</li>"; 
} 
foo += "</ul>"; 

maintenant tout cet aspect est considéré comme un rasoir, y compris la var foo

+0

Je pense que c'est le contraire de ce que le PO demande à propos de –

+0

oui, c'est le contraire de ce que je demandais. – TMC

Questions connexes