15

次のケースがあります。

私は自分のページにグリッドビューを持っています:

page1.aspx

Radウィンドウpage2.aspxでそのグリッドビューを介して別のページ ( ) を開き、その後、いくつかのボタンを使用して、最後のページ ( )も開きます。page2.aspxpage3.aspxrad window

これらのすべての手順は、サーバー側のコードを介して実行されます。


 protected void OpenNewWindow(string url, int width, int height, int mode)
        {
            RadWindow newWindow = new RadWindow();
            newWindow.NavigateUrl = url;
            newWindow.VisibleOnPageLoad = true;
            newWindow.KeepInScreenBounds = true;
            newWindow.Skin = "Metro";
            if (width > 0)
            {
                newWindow.Width = width;


            }
            if (height > 0)
            {
                newWindow.Height = height;
            }
            newWindow.VisibleStatusbar = false;
            if (mode == 0)
            {
                {

                }
                //newWindow.OnClientClose = "OnChildWindowClosed";
                newWindow.DestroyOnClose = true;
                newWindow.InitialBehaviors = WindowBehaviors.Maximize;
            }
            RadWindowManager1.Windows.Add(newWindow);
        }

私がやりたいことは:

my ( ) の特定のボタンをクリックすると、そのボタンpage3.aspxとその親が閉じpage2.aspxます。

これを行う方法(サーバー側)?

page3.aspx私はこれを試します:しかし、親も閉じたい子を閉じるだけpage2.aspxです?!


  protected void Button1_Click(object sender, EventArgs e)
        {
            ((RadAjaxManager)this.Parent.FindControl("RadAjaxManager1")).ResponseScripts.Add("CloseModal();");

            RadAjaxManager1.ResponseScripts.Add("CloseModal();");
        }
4

3 に答える 3

8
protected void Button1_Click(object sender, EventArgs e)
{
    ((RadAjaxManager)this.Parent.FindControl("RadAjaxManager1")).ResponseScripts.Add("CloseModal();");

    RadAjaxManager1.ResponseScripts.Add("CloseModal();");
}

CloseModal()イベントが正しく発生している場合は、そのwindow.close()中で呼び出すことができるはずです。window.close()RadWindows は親ウィンドウのコンテキストにのみ存在するため、開いている各ウィンドウを閉じる呼び出しを引き続き実行できるはずです。

編集:少しトピックから外れていますが、Telerik からのこのリンクは、RadWindow から親ウィンドウのハンドルを取得する方法を示しています。次に、クライアント側の close メソッドを呼び出してブラウザ ウィンドウ (page1.aspx) を閉じます。これにより、以降のすべての RadWindows が閉じられます。

このリンクから:

RadWindow とブラウザのポップアップの主な違いは、他の DHTML 要素と同様に、RadWindow はそれが作成されたページのコンテキストにのみ存在することです。ブラウザ ウィンドウの境界を離れることはできません。

于 2013-04-02T15:12:56.673 に答える
7

親ごとにインターフェースを実装することで、バブルイベントを実行できます。私は自分の心を説明しようとします。

public interface IClosingParent
{
    void Close();
}

public class PageA : System.Web.Page, IClosingParent
{
    public void IClosingParent.Close()
    {
        //Code to close it or hide it
    }
}

public class PageB : System.Web.Page, ClosingParent
{
    public void IClosingParent.Close()
    {
        ((IClosingParent)this.Parent).Close();

        //Code to close it or hide it
    }
}

public class PageC : System.Web.Page
{        
    protected void ButtonClose_Click(object sender, EventArgs e)
    {
        ((IClosingParent)this.Parent).Close();

        //Code to close it or hide it     
    }
}

これには、RadWindow を親に宣言する必要があることが含まれます。したがって、そのように思われる階層ビューでは:

PageA : IClosingParent
| |
|-- PageB : IClosingParent
    | |
    |-- PageC
        |--ボタン閉じる

このソリューションを使用すると、必要に応じてクロージングプロセスを管理し、いつでも好きなように変更できると思います.

于 2013-04-05T14:45:55.390 に答える
2

これは素朴に聞こえるかもしれませんが、実行したいサーバー コードを閉じる前に単純に実行してから、ウィンドウを閉じる if ステートメントを実行できるようにする bool パラメーターをクライアントに返してはどうでしょうか (クライアント側)。

PS : 私はアルゴリズム的に考えています。サーバー側の C# の経験はあまりありません。

于 2013-04-02T10:23:47.107 に答える