2013-05-26 4 views
2

Прежде всего я не разработчик MVC. Я просто пытаюсь помочь нескольким ребятам из MVC в их проекте из-за различных ограничений, которые у них есть, поэтому, если это это n00b вещь, пожалуйста, не стреляйте :)ASP.NET MVC - Как выполнить условный код C# в javascript

Вот вещь - есть основа, которая используется в этой команде, которая имеет функцию визуализации, как так:

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> Написать цикл Еогеасп как-то, где вместо того, чтобы использовать lablesPosition [0] и т.д. Я могу сделать что-то вроде lablesPosition [я]

2> Я знаю, число записей в коллекции для каждого сценария и поэтому на основе выбора сценария я пишу 5 настроек или 4 параметров с использованием, если - еще блока, как так:

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, похоже, оценивать все выражение с помощью «@» во время выполнения, независимо от валидации состояния if-else в JS, и, следовательно, код ломается для меня - в основном он может попытаться получить доступ к значению в коллекции в позиции 6, когда коллекция имеет только 2 элемента ,

Как я могу решить эту проблему? (ASP.NET MVC 3)

+0

Используйте цикл 'foreach' /' for', чтобы вручную индексировать элементы. – Candide

+0

Я немного смущен, вы хотите реализовать определенную процедуру java-скрипта на C#. Вы хотите изменить функцию JavaScript на основе того, что доступно в коде C#? Реальный вопрос: что вы хотите совершить с дополнительным JS? –

ответ

0

Если я понимаю вопрос, ваша проблема в том, что RAZOR не может знать, какие значения C# пропустить на основе Javascript. Он не оценивает JS, а просто генерирует его.

Он считает, что вам нужно привести свой условный уровень на сервер, если ваша логика поддерживает это (и это должно).

Это значит, if(selectiong=="a") не должно быть JSif/else он должен быть C#if/else.

Взгляните на это SO question (Simple If/Else Razor Syntax) для базовой реализации.

0

Спасибо за все указатели. В конце концов, я вычислил способ генерации данных для «меток» в коде C# динамически и отправки его в мой JS в переменной, которая оценивается как @ Html.Raw в настройках конфигурации, и она отлично работает.

Смежные вопросы