Недопустимый токен else в объявлении члена класса, структуры или интерфейса.

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

<tr style='<%#if(DataBinder.Eval(Container.DataItem, "ViewedType")== 1) 
 { %> background-color: yellow;  <% }
   else { <% background-color: white;
    <%} %>'>

но он показывает мне ошибку

CS1519: Invalid token 'else' in class, struct, or interface member declaration

Source Error:

Line 128:  style='<%#if(DataBinder.Eval(Container.DataItem, "ViewedType")== 1) 
Line 129:  { %> background-color: yellow;  <% }
Line 130:  else { <% background-color: white;
Line 131:  <%} %>'>
Line 132:  <%--<td>

как решить?


person user3265377    schedule 05.02.2014    source источник
comment
Должно быть: иначе { %›   -  person the_lotus    schedule 05.02.2014
comment
Вы действительно должны выполнять эту логику в коде, прежде чем привязывать значения, а не в шаблоне. Если связанный столбец - это просто цвет, вы можете просто привязать к нему цвет фона.   -  person Servy    schedule 05.02.2014


Ответы (2)


Пытаться

<tr style='background-color: <%# ChooseColor((int)DataBinder.Eval(Container.DataItem, "ViewedType")) #>;'>

куда

protected string ChooseColor(int viewedType){
    if (viewedType == 1) return "yellow"; else return "white";
}
person John Saunders    schedule 05.02.2014
comment
Хороший вариант, я думаю, вам нужно добавить приведение в разметку, так как DataBinder.Eval возвращает объект. Что-то вроде <%# ChooseColor((int) DataBinder.... - person John Gibb; 05.02.2014
comment
@JohnSaunders код, который является защищенной строкой, находится в .aspx или в .aspx.cs - person user3265377; 06.02.2014
comment
.aspx.cs. В файле .aspx должен быть только минимальный код C#. Не более чем простые выражения привязки данных. - person John Saunders; 06.02.2014

Вы не можете использовать управляющие структуры (например, операторы if) внутри тега выражения привязки данных (то есть <%# %>), но вы также не можете использовать DataBinder внутри обычного тега (<% %>).

Я бы рекомендовал просто использовать встроенный условный оператор следующим образом:

<tr style='background-color: <%# (bool) DataBinder.Eval(Container.DataItem, "ViewedType") ? "yellow" : "white" %>'>
person John Gibb    schedule 05.02.2014
comment
это показывает мне ошибку, если (DataBinder.Eval (Container.DataItem, ViewedType) == 1) в этой строке ОШИБКА IS CS0103: имя «Контейнер» не существует в текущем контексте - person user3265377; 05.02.2014
comment
Да, правильно, вы можете использовать DataBinder только внутри тегов <%# %>. У меня есть еще одна идея, отредактирую - person John Gibb; 05.02.2014
comment
@user3265377 user3265377 Попробуйте сейчас, я думаю, это должно сработать для вас. - person John Gibb; 05.02.2014
comment
он показывает мне ошибку Оператор '==' не может быть применен к операндам типа 'объект' и 'int' - person user3265377; 06.02.2014
comment
@ user3265377 Попробуйте сейчас. Вам нужен был актерский состав. - person John Gibb; 06.02.2014
comment
это показывает мне ошибку ... Указанный состав недействителен. - person user3265377; 06.02.2014
comment
Ты должен разобраться в этом сам. Выясните, что такое ViewedTypes, видимо, это не int, хотя вы сравниваете его именно с ним. Если это строка, используйте вместо нее (string) DataBinder.Eval(Container.DataItem, "ViewedTypes") == "1". - person John Gibb; 06.02.2014
comment
а если это бит... то что мне делать - person user3265377; 06.02.2014
comment
Приведите его к логическому значению, используйте (bool) DataBinder.Eval(Container.DataItem, "ViewedTypes") - person John Gibb; 06.02.2014
comment
эй, я попробую это .. ‹tr style='background-color: ‹%# (bool) DataBinder.Eval(Container.DataItem, ViewedID)== 1 ? желтый: белый %›'›, и он показывает мне ошибку .... Оператор '==' не может применяться к операндам типа 'bool' и 'string' - person user3265377; 07.02.2014
comment
что значит что насчет 1? - person John Gibb; 11.02.2014
comment
Да. bit в sql - это bool в С#. Это означает, что вы можете просто использовать его напрямую и не сравнивать его с 1. - person John Gibb; 11.02.2014
comment
Нет. Буквально просто поставь это и попробуй. <tr style='background-color: <%# (bool) DataBinder.Eval(Container.DataItem, "ViewedID") ? "yellow" : "white" %>'> - person John Gibb; 14.02.2014
comment
Большая часть этой ветки не посвящена вопросам привязки данных — она перешла к вопросам о типах в C#. HTML/JavaScript не являются строго типизированными, но как только вы перейдете к блоку кода, вы окажетесь в строго типизированной стране. en.wikipedia.org/wiki/Type_safety - person DrShaffopolis; 14.02.2014