0

フォームに入力した後、項目の作成を確認するためにポップアップする Jquery UI ダイアログがあります。フォームのさまざまなニーズにより、特にページをリロードせずにフォームで検証を行う必要があるため、更新パネルにフォームがあります。

JavaScript が非同期ポストバックでリロードされないように見えます。これは、フォームが成功し、変数「formSubmitPass」を true に変更すると、<%= formSubmitPass %> を介して Javascript に渡されないことを意味します。送信ボタンにトリガーを追加して完全なポストバックを実行すると、機能します。ただし、送信ボタンで完全なポストバックを実行したくないので、更新パネル内でフォームを検証できます。

フォームが非同期で検証されるようにするにはどうすればよいですか?ただし、フォームが正常に完了し、アイテムがデータベースに保存されると、javaScript は適切にリロードされますか?

Javascript:

    var formSubmitPass = '<%= formSubmitPass %>';
var redirectUrl = '<%= redirectUrl %>';

function pageLoad() {

    $('#formPassBox').dialog({
        autoOpen: false,
        width: 400,
        resizable: false,
        modal: true,
        draggable: false,
        buttons: {
            "Ok": function() {
                window.location.href = redirectUrl;
            }
        },
        open: function(event, ui) {
            $(".ui-dialog-titlebar-close").hide();
            var t = window.setTimeout("goToUrl()", 5000);
        }
    });

    if(formSubmitPass == 'True')
    {
        $('#formPassBox').dialog({
            autoOpen: true
        });
    }

では、コード ビハインドからポストバックを強制したり、非同期ポストバックで JavaScript をリロードしたり、非同期フォーム検証を継続できるようにするにはどうすればよいでしょうか?

編集: コードビハインドの最後で formSubmitPass を変更します:

If errorCount = 0 Then
            formSubmitPass = True
            upForm.Update()
        Else
            formSubmitPass = False
        End If

したがって、完全なポストバックでは、値が変更されます。

4

3 に答える 3

2

htmlが更新パネルに置き換えられており、jQueryセレクターが新しい要素にバインドされていないようです。

すべてのイベントに.Liveを使用するか、ajaxの更新後に再バインドしてみてください(これにはUpdatePanelプラグインを使用できます)

于 2010-05-07T21:30:07.633 に答える
0

何をしようとしているのか正確にはわかりません。<%= formSubmitPass %>これは、ページのリロード時にのみ設定されるサーバー変数であるため、再評価されることはありません。javascriptを再度実行しても、値は変わりません。

ただし、メソッドにsuccesコールバックを渡すこともできます。.dialog()

$('#formPassBox').dialog({
  // ...
  success: function(){ 
    // do something, e.g.
    $("#formPassBox").dialog({autoOpen:false});
  }
});
于 2010-05-07T21:01:27.207 に答える
0

私にとってうまくいったのは、最初にダイアログjavascriptをpage_loadに入れて、auto openプロパティを次のようにfalseに設定することです。

function pageLoad() {

    $('#formPassBox').dialog({
        autoOpen: false
     });
}

次に、次のように完全に別の関数を作成します。

function formSubmitPass() {
    $('#formPassBox').dialog({
        autoOpen: true,
        width: 400,
        resizable: false,
        modal: true,
        draggable: false,
        buttons: {
            "Ok": function() {
                window.location.href = redirectUrl;
            }
        },
        open: function(event, ui) {
            $(".ui-dialog-titlebar-close").hide();
            var t = window.setTimeout("goToUrl()", 10000);
        }
    });
}

次に、次の質問で示されるように RegisterStartupScript を使用します:更新パネルでフォーム送信後に JavaScript を実行しますか? ScriptManager.RegisterStartupScriptの何が問題になっていますか?

私のコード:

ScriptManager.RegisterStartupScript(Me, upForm.GetType(), "AutoPostBackScript", "formSubmitPass();", True)

注: ClientScript ではなく ScriptManager を使用してください。また、更新パネルの 2 番目のパラメーターには GetType() を使用してください。

コード ビハインドでstringbuilder ( ASP.NET RegisterStartupScript メソッドの効率的な使用 ) を使用する代わりに、コード ビハインドに javaScript を配置するのは扱いにくいと感じましたが、別の関数を作成してそれを呼び出すだけで、うまく機能しました。

于 2010-05-10T21:25:06.487 に答える