1

質問の前に、ASP および VB プログラミングにかなり慣れていないため、提供するすべての言語とフレームワークにまだ触れていないという免責事項を付けておきます。

VB を使用して ASP サイトを構築していますが、従うべき特定の要件があります。問題のフォームのセクションでは、一連のテキスト ボックスがアイテムの数量を収集します。ポストバック時に、数量を使用して合計が再計算されます。これらのコントロールはすべて計算を完璧に実行します。

このフォームでは、OnChange Javascript イベントを使用して、いずれかが変更されたときにポストバックをトリガーしています。これも正しく動作します。ただし、変更中のテキストボックスからユーザーがクリックまたはタブ移動してポストバックが発生すると、コントロールがフォーカスされていないように見えます。

ユーザーが別のコントロールをクリックした場合、ユーザーがクリックしたコントロールにフォーカスする必要があります。ポストバックがトリガーされる直前にフォーカスを取得したコントロールの ID を取得できるイベントまたはメソッドはありますか? 実際にポストバックをトリガーしたコントロールの ID を収集する方法を示すいくつかの質問と回答を見てきましたが、これにより、変更されたばかりのフィールドにフォーカスが直接戻されます。

ポストバックをトリガーしたコントロールにフォーカスが配置されているかどうかに関係なく、ユーザーは次のコントロールを 2 回選択する必要があります。1 回目は間接的にポストバックを起動し、もう 1 回は目的のコントロールにフォーカスを配置します。

4

1 に答える 1

0

私はあなたを完全に理解しているとは言えませんが、あなたの説明からシナリオを再現しようとしました.UpdatePanelを使用するのは簡単な解決策のようです. これは、詳細を気にすることなく、ページを ajax 化するための迅速かつ簡単な方法です。更新中のフィールドを UpdatePanel で囲み、ポストバックを引き起こすコントロール (この場合は非表示のボタン) の AsyncPostBackTrigger を追加します。

<script type="text/javascript">
    function pb() {
        document.getElementById("<%= btnPostBack.ClientID %>").click();
    }
</script>
<asp:button id="btnPostBack" runat="server" onclick="PostBack" style="display: none;" />

<asp:textbox id="t1" runat="server" onchange="pb();" />
<asp:textbox id="t2" runat="server" onchange="pb();" />
<asp:textbox id="t3" runat="server" onchange="pb();" />
<asp:textbox id="t4" runat="server" onchange="pb();" />

<asp:updatepanel id="update" runat="server">
    <contenttemplate>
        <asp:label id="label" runat="server" />
    </contenttemplate>
    <triggers>
        <asp:asyncpostbacktrigger controlid="btnPostBack" />
    </triggers>
</asp:updatepanel>

コード ビハインドの PostBack メソッドでは、t1、t2、t3、および t4 の値を単純に集計します。ある TextBox から次の追加テキストにタブで移動でき、ラベルはフォーカスを失うことなく更新されます。

于 2012-12-05T22:34:58.260 に答える