0

リストボックスから選択したすべてのアイテムをページのラベルに連結文字列として表示するJavaScript関数を追加しようとしています。AutoPostBack = "true"を指定すると、リストボックスが最初に選択したアイテムまでスクロールして戻るため、これが必要です。

したがって、このコードは機能します。

 <script type="text/javascript">
    function Updatelist() { 
        var sel = document.getElementById('<%=lstbxStuff.ClientID%>'); 
        var lbl = document.getElementById('ctl00_cph_lblSelectedStuff');
        var listLength = sel.options.length; 
        var textForListbox = "";
        var list2length = 0;
        for (var i = 0; i < listLength; i++) { 
            if (sel.options[i].selected) { 
               if(list2length == 0) {
                    textForListbox = sel.options[i].text; 
                } else {
                    textForListbox = textForListbox + ", " + sel.options[i].text; 
                }
                list2length++; 
            } 
        } 
        lbl.innerText=textForListbox;

        return textForListbox;
    } 
</script>

残念ながら、SelectedIndexChangedデリゲートの背後にあるコードがまだ必要です。PostBackを実行せずにこれらの両方を使用する方法はありますか?AutoPostBack = "false"を設定すると、代理人に連絡が取れないようです。

4

2 に答える 2

0

それがあなたが望む振る舞いでないなら、AutoPostBackがあなたのために行く方法ではないと思います。ASP.Netが完全なポストバックを行う場合、それは「従来の」HTMLフォームのポストと同じであり、フォームのコンテンツ全体をサーバーに送り返し、応答を待ちます(これは、方法が原因で同じページになります)。 Asp.Netが応答します)。したがって、リストボックス内の位置が失われる理由-それはあなたが取り戻している真新しいリストボックスです。

考えられるオプションの1つとしてASP.NetAjax(UpdatePanels)を見たことがありますか?これは、データをサーバーに送り返し、メソッドを呼び出すという点でポストバックと同じように動作しますが、ページの一部のみをポストバックします。

于 2010-10-25T22:06:22.077 に答える
0

サーバー側のデリゲートを呼び出したい場合は、PostBackを実行する必要があります。

実行する必要があるサーバー上のコードは何ですか?JavaScriptですべての作業を実行できるはずです。次に、すべてのリストアイテムが選択されたら、別のトリガー(selectedIndexChangeではない)を使用してサーバー側のコードを実行します。

また、AjaxUpdatePanelとmaintainScrollPositionOnPostBack= "true"を確認して、ポストバック後もページがスクロール位置を保持するようにします。ただし、これはページのスクロールバーにのみ影響し、選択ボックスには影響しません。

于 2010-10-25T22:06:32.980 に答える