2015-07-16 2 views
2

Я не совсем уверен, почему это происходит. То, что я пытаюсь сделать, это вставить переменную C# в оператор javascript if, но она не выполняется, как я хочу, и я не уверен, почему.Javascript, если утверждение не выполнено

У меня есть список в моем C# имен

C# список:

List<string> unitNamesMainChart = new List<string>(); 

При загрузке этот список не имеет ничего в нем, так что я хочу, чтобы убедиться, что я не доступ к списку без чего-либо в он, поскольку это вызовет ошибку, поэтому у меня есть оператор if в javascript.

Javascript

if(<%=unitNamesMainChart.Count %> >= 1){ 
    a = <%= unitNamesMainChart[0] %> 
}else{ 
    a = '' 
} 
if(<%=unitNamesMainChart.Count %> >= 2) 
     { 
      b = <%= unitNamesMainChart[1] %> 
      }else{ 
      ba = '' 
     } 
//etc. There are numerous if statements. 

Так в идеале, я хотел бы проверить, есть ли что-нибудь в списке, если есть, установите его в переменной a в JavaScript, и если нет ничего в списке, то установите a=''

Что происходит на самом деле, это когда код выполнен, он падает на a = <%= unitNameMainChart[0] %>, потому что в 0-м месте ничего нет.

Любая идея, почему код будет выполняться следующим образом?

+0

Можете ли вы опубликовать то, что выглядит на странице после того, как был обработан javascript? –

+0

Я не могу, потому что всплывает страница с ошибкой. Поскольку код javascript выполняется при загрузке страницы, страница не работает с самого начала. –

+0

Я просто посмотрел, я не знал об этом. Хотя проблема решена. Спасибо –

ответ

2

Эта линия:

if(<%=unitNamesMainChart.Count %> >= 1){ 

преобразуется в эту строку в javascript:

if(0 >= 1){ 

где 0 может быть любым числом, любой, возможно, является действительностью нуля.

Эта линия:

a = <%= unitNamesMainChart[0] %> 

преобразуется в:

a = --Something-- 

Где --Something--, предполагают, чтобы быть первое значение массива.

Вы неправильно смете код JavaScript и .net.

Вы ищете что-то вроде этого:

<%if(unitNamesMainChart.Count >= 1){%> 
    a = <%= unitNamesMainChart[0] %>; 
<%} 
else 
{%> 
    a = -1; // or something 
<%}%> 

JavaScript, который вы увидите на странице будет:

a = -- Something -- 

Условный \ остальное .net код, а выход (a = -- Something --) - это JavaScript.

+0

Позвольте мне обновить вопрос, так как я думаю, я должен был добавить еще код. –

+1

hmmm Хорошо, я думаю, что ваше редактирование имеет смысл для меня. Позвольте мне попытаться адаптировать этот код к моему. –

+0

Это работало для меня. Я сбивал с толку оператор javascript if и оператор C# if. Кроме того, почему мне нужно '=' в строке 'a = <% = unitNamesMainChart [0]%>;', и мне это не нужно при установке оператора C# if? –

-2

Проблема заключается в том, что javascript может представлять функцию .Count как строку не как целое число. Попробуйте использовать следующую оболочку, заключенную в оператор .Count, чтобы убедиться, что он занесен в число.

parseInt(<%=unitNamesMainChart.Count %>) 
+0

Это не то, что происходит. Посмотри снова. – StriplingWarrior

+0

@StriplingWarrior хорошая работа вниз голосование без причины, хорошо, так что происходит, если вы так уверены, что не то, что происходит? –

+0

Я прошу прощения, если я натолкнулся на него как на короткое время. Я работаю над написанием ответа в ответном сообщении. – StriplingWarrior

1

Проблема в том, что существует несоответствие между тем, что вы проверяете на C#, и тем, что вы проверяете на JavaScript. Как это написано в настоящее время, ваш оператор if проверяется в JavaScript в браузере, но unitNamesMainChart[0] получает оценку C# независимо от того, насколько велик список.

Я рекомендовал бы двигаться всю логику в C# и оставить JavaScript без if/else филиала:

a = <%=((unitNamesMainChart.Count >= 1) ? unitNamesMainChart[0] : "''")%>; 

Или, более лаконично:

a = <%=unitNamesMainChart.FirstOrDefault() ?? "''"%>; 
+0

Это не отвечает на вопрос о том, почему инструкция «If» не работает в Javascript .... –

1

Вы смешиваете код, выполняемый на стороне сервера и на стороне клиента, важно понимать, где и когда все выполняется.

На стороне сервера мы просто генерируем текст, конструкции Javascript не имеют смысла и if не оценивается. Это просто текст. Это означает, что <%= unitNamesMainChart[0] %> будет выполняться во всех случаях, так как он не защищен серверным тестированием (и, конечно, он дает вам исключение, если список пуст).

Вы можете переписать код так, чтобы избежать этой проблемы:

<% if (unitNamesMainChart.Count > 0) {%> 
    a = '<%= unitNamesMainChart[0] %>' 
<% } else {%> 
    a = '' 
<% } %> 

На этот раз тест выполняется на стороне сервера, и вы не будете пытаться получить первый элемент, если список пуст ,

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