問題の調査に数日を費やしましたが、正しく動作させることができませんでした。この問題に関連するいくつかのトピックがここにあることを知っており、それらを読むことは助けになりましたが、少し障害があり、正しい方向へのプッシュに感謝します.
ユーザーが一部のデータを維持できるようにする小さな .NET 3.5 VB.NET Web アプリケーションを作成しました。3ページで構成されています。私が完全に好きではなかった要件の 1 つは、ユーザーが変更をグリッドに適用するたびに DB に保存するのではなく、すべての変更を行ってから最後に保存ボタンを押したいということでした。
各ページにオブジェクトのコレクションを保存するためにセッション オブジェクトを使用しており、ユーザーがドロップダウンの値を変更しようとしたり、保留中のアクションがあるときにページを離れようとすると、ユーザーにダイアログを表示したいと考えています。ここや他の場所で多くの調査を行った後、ページに隠しフィールドを作成し、サーバー側でアクション コレクションが更新されるたびにその値を更新することにしました。次に、その値を評価し、それが 0 より大きい場合は、変更を保存するようユーザーに促します。
私の機能:
<telerik:RadCodeBlock ID="RadCodeBlock2" runat="server">
<script type="text/javascript">
window.onbeforeunload = confirmExit;
function confirmExit()
{
var actionCount = $get('<%=ActionCounterField.ClientID %>').value;
if (actionCount > 0) {
alert("Pending Changes!");
}
}
</script>
</telerik:RadCodeBlock>
私の隠しフィールド宣言:
<asp:HiddenField id="ActionCounterField" runat="server" />
私のサーバー側のコード:
Protected Sub UpdateActionCount()
ActionCounterField.Value = GoalCategoryActionList.Count
End Sub
アプリケーションをデバッグしてグリッドにレコードを追加すると、サーバー側のコードが正しく実行されます。また、隠しコントロールが JavaScript 関数によって検出されることも確認しました。しかし、私が把握できていないのは、隠しフィールドの値が関数によって見つからない理由です。
どんな助けでも大歓迎です。ありがとうございました!