Смущает область видимости переменной при смешивании Javascript и Razor в ASP.NET MVC3

#c# #asp.net-mvc #asp.net-mvc-3 #razor

#c# #asp.net-mvc #asp.net-mvc-3 #razor

Вопрос:

У меня есть некоторый код, который выходит из строя из-за ошибки:

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

Это связано с проблемой области видимости переменной, которая меня смущает. Я думал, что это должно сработать:

 var foo = "<ul>";

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

Синтаксис Razor должен вызывать цикл for, и переменная foo все еще будет находиться в области видимости с точки зрения javascript, потому что к тому времени, когда браузер интерпретирует код, синтаксис razor практически невидим.

Однако сообщение об ошибке, которое я получаю, исходит от компилятора, поэтому каким-то образом C # пытается ссылаться foo . Чего мне не хватает и как мне изменить код, чтобы вывести правильный код javascript, чтобы он объединялся <li>bar</li> , как я пытаюсь сделать?

Ответ №1:

Предполагается, что содержимое блока кода, такого как for цикл, является кодом на стороне сервера.

Вам нужно явно указать Razor, что это разметка, используя <text> специальный тег.

Комментарии:

1. Спасибо! Именно то, что я искал, и <text></text> и префикс ‘@:’ работают.

Ответ №2:

 @{
var foo = "<ul>";

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

}
  

или это

 @var foo = "<ul>";

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

теперь весь этот аспект рассматривается как razor, включая var foo

Комментарии:

1. Я думаю, что это противоположно тому, о чем спрашивает OP