ASP.NET MVC-как выполнить условный код C# в javascript
Во-первых, я не являюсь разработчиком MVC - я просто пытаюсь помочь нескольким ребятам MVC в их проекте из-за различных ограничений, которые у них есть, поэтому, если это n00b, пожалуйста, Не стреляйте :)
Вот в чем дело - есть фреймворк, который используется этой командой, которая имеет функцию рендеринга так:
ObjMP.render ({
// various configuration options
labels: [
{ settings: '@Html.Raw(lablesPosition[0])', content: '@Html.Raw(lablesContent[0])' },
{ settings: '@Html.Raw(lablesPosition[1])', content: '@Html.Raw(lablesContent[1])' }
]
Параметр конфигурации, который беспокоит меня, - это параметр "метки", показанный выше.
"lablesContent" и "lablesPosition" на самом деле являются IList в моем .cshtml файл.
Приведенный выше код использует настройки, хранящиеся в коллекции с индексами 0 и 1, Как вы можете видеть. Это на самом деле жестко закодированная вещь.
Я не гарантирую, что в коллекции будет только 2 предмета.
Чтобы преодолеть это, я могу сделать либо:
1 > напишите цикл foreach, где вместо использования lablesPosition[0] и т. д. Я могу сделать что-то вроде lablesPosition[i]
2> я знаю количество записей в коллекции для каждого сценария и поэтому на основе выбор сценария я пишу 5 настроек или 4 настройки, используя блок if-else, например:
if(selectiong=="a")
{
labels: [
{ settings: '@Html.Raw(lablesPosition[0])', content: '@Html.Raw(lablesContent[0])' },
{ settings: '@Html.Raw(lablesPosition[1])', content: '@Html.Raw(lablesContent[1])' }
]
}
else if(Select=="b")
{
labels: [
{ settings: '@Html.Raw(lablesPosition[0])', content: '@Html.Raw(lablesContent[0])' },
{ settings: '@Html.Raw(lablesPosition[1])', content: '@Html.Raw(lablesContent[1])' },
{ settings: '@Html.Raw(lablesPosition[2])', content: '@Html.Raw(lablesContent[2])' }
]
}
Проблема во втором подходе заключается в том, что при рендеринге страницы движок RAZOR, похоже, вычисляет все выражения с "@" во время выполнения независимо от valdiation условия if - else в JS и, следовательно, разрывы кода для меня - в основном он может попытаться получить доступ к значению в коллекции в позиции 6, когда коллекция имеет только 2 элемента.
Как я могу решить эту проблему ?
(ASP.NET MVC 3)
2 ответов:
Если я правильно понял вопрос, Ваша проблема в том, что RAZOR не может знать, какие значения C# пропустить на основе Javascript. Он не оценивает JS, он просто генерирует его.
Он думает, что вам нужно вывести ваше условное условие на уровень сервера, если ваша логика поддерживает это (и она должна).
Это означает, что
if(selectiong=="a")не должно быть JSif/elseэто должно быть A C#if/else.Взгляните на этот так называемый вопрос (простой синтаксис if / Else Razor) для базового реализация.
Спасибо за все указатели. В конце концов, я нашел способ динамически генерировать данные для "меток" в коде C# и отправлять их в мой JS в переменной, которая оценивается как @Html.Raw в настройках конфигурации, и он работает нормально.
Comments