プロジェクトで DevExpress ツリーリスト コントロールを使用しています。列の 1 つで、アイコンをクリックすると JavaScript 関数を呼び出すことができます。ラジオ ボタンのインデックスの 1 つが != 0; の場合、関数の一部を呼び出さないようにする必要があります。
ClientSideEvents クラスで、CustomButtonClick 属性に、列でクリックされたボタンに応じて実行される JavaScript を設定しました。関連するコード:
<ClientSideEvents
CustomButtonClick="function(s, e)
{
switch(e.buttonID)
{
case 'scMarkRead':
treeWatches.PerformCallback(e.buttonID + '|' + e.nodeKey);
break;
case 'scMarkUnread':
treeWatches.PerformCallback(e.buttonID + '|' + e.nodeKey);
break;
case 'scStrike':
treeWatches.GetNodeValues(e.nodeKey, "Database", addDB);
treeWatches.PerformCallback('scMarkRead|' + e.nodeKey);
break;
case 'scCreateTask':
var fields = ["Database", "Filename", "Name"];
treeWatches.GetNodeValues(e.nodeKey, fields, createTask);
break;
case 'scDelete':
treeWatches.PerformCallback(e.buttonID + '|' + e.nodeKey);
}
「scStrike」の場合、radlstGroup.SelectedIndex != 0 の場合は、treeWatches.PerformCallback.... 行を呼び出したくありません。他の場所では、コードを条件 <% if else {} %> でラップすることができました。うまくいきましたが、これは表示したくないコントロールに関するものでした。以下の例を試してみると、ページは読み込まれますが、ツリーリストは展開されません。
<ClientSideEvents
CustomButtonClick="function(s, e)
{
var url = 'http://gcs.regscan.com/strike/Strike.aspx?db=';
switch(e.buttonID)
{
case 'scMarkRead':
treeWatches.PerformCallback(e.buttonID + '|' + e.nodeKey);
break;
case 'scMarkUnread':
treeWatches.PerformCallback(e.buttonID + '|' + e.nodeKey);
break;
case 'scStrike':
treeWatches.GetNodeValues(e.nodeKey, "Database", addDB);
<% if (radlstGroup.SelectedIndex == 0)
{%>
treeWatches.PerformCallback('scMarkRead|' + e.nodeKey);
<%} %>
break;
case 'scCreateTask':
var fields = ["Database", "Filename", "Name"];
treeWatches.GetNodeValues(e.nodeKey, fields, createTask);
break;
case 'scDelete':
treeWatches.PerformCallback(e.buttonID + '|' + e.nodeKey);
}
最悪の場合、コントロールの div 全体に if ブロックを配置し、else に行を入れずに同じコードを配置できると確信していますが、1 行を除外するためだけに 100 行以上のコードを繰り返すのはばかげているようです。良い提案はありますか?