3

私にはいくつかのDevExpressコントロールがあり、そのうちの1つはボタンであるとしましょう。そのボタンに、他の各コントロールのClientInstanceNamesを追加して、ボタンのクライアント側のクリックイベントでそれらにアクセスできるようにします。

c#:

String strID = "MyButton";
ASPxButton btn =  new ASPxButton() { ClientInstanceName = strID , Text = "Click Here", Width = new Unit("100%"), AutoPostBack = false, CssFilePath = strCssFilePath, CssPostfix = strCssPostFix };
btn.ClientSideEvents.Click = "btnClick";
btn.JSProperties.Add("cp_MyTxtBx", strID );

これに似たようなことをしたい...

js:

<script type="text/javascript">
        function btnClick(s, e) {
            var theTxtBx = document.getElementById(s.cp_MyTxtBx);
            theTxtBx.SetText('some text');
        }
</script>

しかし、それはうまくいきません。私はこのようにそれを行うことができることを知っています:

<script type="text/javascript">
        function btnClick(s, e) {
            MyTxtBx.SetText('some text');
        }
</script>

ただし、これらのコントロールは動的に作成されるため、実行時までClientInstanceNamesはわかりません。

では、ClientInstanceNameの文字列JSPropertyに基づいてコントロールを取得するにはどうすればよいですか?

前もって感謝します。

関連する投稿ですが、私が必要としているものではありません:

JavaScriptからASPxTextBoxの値にアクセスする方法

DevExpress:コントロールのクライアント側のインスタンスを取得し、そのクライアント側のメンバーにアクセスするにはどうすればよいですか?

4

2 に答える 2

5

私があなたを正しく理解した場合、これはあなたが必要とするものです:

var theTxtBx = window[s.cp_MyTxtBx];

ClientInstanceNameが設定されているすべてのdevexコントロールは、グローバル変数として登録されます。

于 2012-05-15T18:35:09.903 に答える
-1

あなたは何かをハックすることができます...

基本的に、テキストボックスを動的に作成するときに、一意のクライアントインスタンス名を付けます。

ページの読み込みが終了すると、宣言して配列し、要素をテキストボックスオブジェクトと等しくなるように設定するJavaScriptを出力できます。

var ServerSideList = new List<string>();

while(CreatingTextBoxes)
{
    ...
    ServerSideList.Add(uniqueTextboxName);
}
....


var sb = new System.Text.StringBuilder();

sb.AppendLine("var clientSideList = [];");

foreach(var s in ServerSideList)
{
        sb.Append("clientSideList.push(");
        sb.Append(s);
        sb.AppendLine(");");
}

AspLiteralObject.Text = sb.ToString();

次に、クライアント側のボタンクリックイベントで、clientSideList配列を反復処理できます。

<script type="text/javascript">
    function btnClick(s, e) {
        var i;
        var theTxtBx;

        for(i = 0; i < clientSideList.length; i++)
        {
            theTxtBx = clientSideList[i];
            theTxtBx.SetText('some text');
        }
    }
</script>
于 2012-05-15T17:44:16.170 に答える