2014-09-26 7 views
-2

Я пытаюсь показать/скрыть ссылку на изображение на основе данных сервера, но, похоже, не может получить html прямо в этом?: Operator. Я не традиционный .net-разработчик, так что это меня толкает.Использование html с?: Operator

<td> 
    <p> 
     <%# (Eval("attachment").ToString() == "No file attached") 
      ? "&nbsp;" 
      : <a href='files/<%# Eval("attachment")%>'> 
       <img src='images/geticon.png' alt='Attachment image' /> 
       </a> %> 
    </p> 
</td> 
+0

Оператор называется * условным оператором * (иногда * тернарным оператором *). С этими ключевыми словами в руке быстрый поиск должен выявить ответ. Понимаете, я не знаком с ASP classic. –

+2

classic-asp/C#? с тех пор, когда – meda

+0

я принял некоторые свободы с добавлением в код новых строк. Надеюсь, он все еще работает и имеет больше смысла, чем одна длинная линия. – gunr2171

ответ

1

Это в основном сокращенный способ делать заявление if/else. Вот как это работает:

string does3equal3 = 3 == 3 ? "3 does equal 3" : "3 does not equal 3. Huh?" 

Это выражение начинается слева от ? и ожидает, что логическое выражение. 3 == 3 упрощает до true. Так как выражение слева оценивается до true, то возвращается выражение между и :. Если выражение должно было вычисляться до false, тогда возвращается выражение после :.

EDIT

Чтобы устранить проблему, попробуйте вместо этого:

<%# (Eval("attachment").ToString() == "No file attached") 
? "&nbsp;" : "<a href='files/" + Eval("attachment") + "'><img src='images/geticon.png' alt='Attachment image' /></a>" %> 

Ваша проблема была 2 раза. Во-первых, у вас не было выражения false, окруженного кавычками. Во-вторых, вы пытались вложить два экземпляра привязки данных (например, <%# %>). Вы не можете этого сделать, и вам не нужно, поскольку вы уже «сбежали».

+0

Я знаю, как это работает. Моя проблема заключается в том, чтобы показать html и как обрабатывать это с помощью asp C# inline. – TheRanch

+0

@ TheRanch - Посмотри мой обновленный ответ – Icemanind

+0

Спасибо! Я подумал, что это связано со вторым связыванием данных. В моем коде конкатенация была правильной в какой-то момент, но не привязкой данных. Урок выучен. – TheRanch

0

:? является ternary operator, которые в основном служат в качестве короткой, если-п.

condition? a : b 
//is equivalent of 

if (condition) 
    a 
else 
    b 
+0

Эта работа:

<% # (Eval ("attachment"). ToString() == "Нет прикрепленного файла") ?" " : "image here"%>

TheRanch

0

, пожалуйста, проверьте, поддерживается ли тройной оператор вообще с помощью очень простого примера.

<%# true ? "true" : "false" %> или что-то в этом роде.

И, конечно, также с ложным.

Затем начните расширять сложность условия, а затем окончательную разметку для отображения.

+0

Я протестировал это первым, и он действительно работает. Если я удалю html после «:» и заменим его на строку, она будет работать. – TheRanch

+0

Вы пробовали поместить HTML после: в кавычки? – bowlturner

+0

@bowlturner у меня. Я также пробовал контактировать весь html без успеха. – TheRanch

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