Динамическое включение кнопки asp на основе значения источника данных - PullRequest
2 голосов
/ 25 июня 2010

решено: см. Мое решение ниже!

с использованием aspx с кодом C #.

У меня есть следующий код в кнопке в шаблоне элемента в виде сетки:

Enabled='<%# IIF(Eval("wrqst_need_ind") == "Y","TRUE","FALSE") %>'

Я получаю следующую ошибку:

The name 'IIF' does not exist in the current context

Что я делаю не так? Я получаю ту же ошибку, если использую «IF» вместо «IIF»

Полный код шаблона элемента выглядит следующим образом:

<ItemTemplate>
                <asp:Button  ID="wrqst_need_ind_btn" runat="server" Text = "Create WR" 
                    onClientClick="javascript:popUp('popup_createWR.aspx')"  
                    Enabled='<%# IIF(Eval("wrqst_need_ind") == "Y","TRUE","FALSE") %>'
                    CommandArgument='<%# Eval("dvc_nm") + "|" + Eval("data_orgtn_yr") %>'/>
</ItemTemplate>

Если я возьму строку, она будет работать нормально.

Мне кажется, это должно работать ...

РЕДАКТИРОВАТЬ: я сейчас использую это:

Enabled='<%#Eval("wrqst_need_ind") == "Y" ? "TRUE" : "FALSE" %>'

И получаю эту ошибку:

Серверный тег сформирован неправильно.

Большое спасибо за вашу помощь!

Обновление:

Я пробовал это:

Enabled='<%# Eval("wrqst_need_ind") == "Y" ? Convert.ToBoolean(1) : Convert.ToBoolean(0) %>' and it ran!

Но каждая кнопка была отключена. Итак, я попробовал:

Enabled='<%# Eval("wrqst_need_ind") == "Y" ? Convert.ToBoolean(1) : Convert.ToBoolean(1) %>'

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

решено: см. Мое решение ниже!

Ответы [ 5 ]

6 голосов
/ 25 июня 2010

В C # этот троичный синтаксис имеет вид:

Eval("wrqst_need_ind") == "Y" ? "TRUE" : "FALSE"

Если вы используете VB.NET (похоже, что вы его не используете), используйте функцию If.

If(Eval("wrqst_need_ind") == "Y", "TRUE", "FALSE")

РЕДАКТИРОВАТЬ: Оказывается, == здесь не будет сравнивать содержимое строки, но объекты строки.Поэтому вместо этого вы должны использовать .Equals("Y").Итак, окончательный ответ от сообщества:

Enabled='<%# Eval("wrqst_need_ind").Equals("Y") %>'
2 голосов
/ 28 июня 2010

Это код, который работал!

Enabled='<%# Eval("wrqst_need_ind").ToString().Equals("Y".ToString()) ? Convert.ToBoolean(1) : Convert.ToBoolean(0) %>'
1 голос
/ 28 июня 2010

Я не уверен во всем, что происходит с Convert.ToBoolean (1). Если вы хотите true и false, просто напишите true и false (без кавычек, иначе это будет рассматриваться как строка).

например. Enabled='<%#Eval("wrqst_need_ind") == "Y" ? true:false %>'

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

Enabled='<%#Eval("wrqst_need_ind") == "Y" %>'
0 голосов
/ 14 января 2015

На случай, если это кому-нибудь еще поможет ...

Этот стиль не работал для меня:

(Eval("status").ToString()).Equals("Done")

но этот стиль сработал:

(Eval("status").ToString()).Contains("Done")
0 голосов
/ 25 июня 2010

Я уверен, что правильная клавиатура - это "если" в нижнем регистре.

...