0

独自の処理の問題についてサポートが必要です。私はこれらの制約を考慮して特定の解決策を探しています。

親ページのグリッドビュー編集クリックからデータを受け取るポップアップaspxページがあります。データがポップアップで変換され、更新前に元のテキストブロックに再構成されるように親ページに送り返されるときに、親ページからポップアップするデータの解析が大量に行われます。

ポップアップがデータを返すかキャンセルされても、親ページのグリッドビューは引き続き編集モードです。

ポップアップから親ページのグリッドビューに[キャンセル]または[更新]ボタンのクリックを渡して、グリッドビュー編集モードから対応するコマンドボタンのリンクをクリックして更新またはキャンセルするようにユーザーに要求することなく、更新またはキャンセルイベントを完了できるようにします。

これを行う方法を完全に理解したいので、私は本当にチュートリアル、リンク、またはサンプルコードを探しています。

更新:親ページにはjquery UIBlockerもあり、ポップアップページの処理が完了するまでユーザーがページに戻るのを防ぎます。重要なコードは次のとおりです。

親ページ

function parentFunc(a) {
    //   Unblocks on return from popup page.
    $.unblockUI({});
    document.getElementById("<%=Textbox1.ClientID %>").value = a;

    alert("Please complete the update by entering a Brief Description then clicking the UPDATE link!!");
}

function parentCancel(s) {
    //   Unblocks because of cancel from popup page.
    // var a = 0;
    $.unblockUI({});

    alert("Please click the Cancel link to complete the Cancel process!!");
}

親ページコードビハインド、ポップアップページに渡す文字列の配列を作成した後の行Updatinfgイベント。

' Sets up popup to open when row selected for edit is cycled.
If IsPostBack Then
    If (e.Row.RowState And DataControlRowState.Edit) > 0 Then
        If Session("updateComplete") <> "Y" And Session("CancelUpdate") <> "Y" Then

            Dim BrowserSettings As String = "status=no,toolbar=no, scrollbars =yes,menubar=no,location=no,resizable=no," & "titlebar=no, addressbar=no, width=850, height=800"
            Dim URL As String = "NewpttStringPopUp.aspx"
            Dim dialog As String = URL
            Dim scriptText1 As String = ("<script>javascript: var w = window.open('" & URL & "','_blank','" & BrowserSettings & "'); $.blockUI({ message: '<h1>Please translate text and click Submit...</h1>' });  </script>")

            ScriptManager.RegisterStartupScript(Me, GetType(Page), "ClientScript1", scriptText1, False)
            Session("updateComplete") = "N"
        End If
    End If
End If

ポップアップページ

function closeform() {
     alert("Please click the Cancel Button at the buttom of the page to Cancel the process!!");

    return "Please click the Cancel Button at the buttom of the page to Cancel the process!!";
   }

function handleWindowClose() {
    if ((window.event.clientX < 0) || (window.event.clientY < 0)) {
        event.returnValue = "If you have made any changes to the fields without clicking the Save button, your changes will be lost.";
    }
}

function callParentFunc() 
{
    var w = window.opener;
    var a;
    if (!w.closed) {
        var val = w.parentFunc(a);
        self.close();
    }
    this.window.focus()
}

function callParentCancel() {
    var w = window.opener;
    var s;
    if (!w.closed) {
    var val = w.parentCancel(s);
    self.close();
    }
}

CANCELBUTTONの背後にあるPOPUP.ASPX.VBコード

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' Cancel Button so that no update is processed.
    ' Sets flag to prevent java popup from reopening after RowUpdating event. Occurs in RowDataBound event.
    'Dim s As String = "c"
    Dim strScript2 As String = "callParentCancel();"
    ClientScript.RegisterStartupScript(GetType(Page), "callParentCancel", strScript2.ToString, True)

    Session("UpdateEnd") = "Y"
    Session("CancelUpdate") = "Y"
    'Response.Write("<script>window.close();</script>")
End Sub

SUBMITBUTTONの背後にあるPOPUP.ASPX.VBコード

弾力性のために、アラリーを構築するプロセスは表示されません。

Session("returnTranslation") = arReturn

    '   Page.PreviousPage.Focus()

    Dim strScript As String = "callParentFunc();"
    ClientScript.RegisterStartupScript(GetType(Page), "callParentFunc", strScript.ToString, True)

    ' Sets flag to prevent java popup from reopening after RowUpdating event. Occurs in RowDataBound event.
    Session("updateComplete") = "Y"

ポップアップが再読み込みされないようにするのに問題がありました。したがって、loadイベントにはif条件があります。動的な数のコントロールが、リテラルとしてポップアップ上に構築されます。そのため、PageInitイベントとPageLoadイベントは、ポストバック以外で発生してコントロールを再構築します。

ありがとう、すべての提案がレビューされます。

4

1 に答える 1

0

最善の策は、親で JavaScript 関数を作成しwindow.opener、ポップアップからアクセスするために使用することです。

親について

processGridCommand = function(command){
    __doPostBack("<%= GridView1.ClientID %>", command);
    return false; 
}

その子から

<script type="text/javascript">
    updateParentGrid = function(command){
        if (window.opener){
            window.opener.processGridCommand(command);
        }
        return false;
    }
</script>
<asp:Button ID="Button1" runat="server" Text="Click" OnClientClick="return updateParentGrid('Update');" />

親でのポストバックの処理

これにより、親でポストバックがトリガーさRaisePostBackEventれ、コード ビハインドでメソッドをオーバーライドすると、必要に応じて処理できます。

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    base.RaisePostBackEvent(source, eventArgument);
    if (source == GridView1)
    {
        switch (eventArgument)
        {
            "Update":
                //perform update logic
                break;
            "Cancel":
                //cancel edit mode
                break;
        }
    }   
}
于 2012-04-25T18:50:30.800 に答える