0

次のコードの問題を修正するために 2 日間作業し、インターネットで見つけたすべての投稿を読みましたが、どれも私の問題を解決できません。

私が使用するコードは次のとおりです。

ページ AdManager.aspx の関連コードは次のとおりです。

<%@ Register TagPrefix="MB" Namespace="E6.WebUI.MessageBox" Assembly="E6.WebUI" %>

:
:
<asp:UpdatePanel ID="upnlContent" runat="server" UpdateMode="Conditional">
     <ContentTemplate>

:
:
<td align="Center">
   <MB:MessageBox ID="mbAssignResource" runat="server" CssClass="wizardLinkButtonYellow" DialogWidth="500" DialogHeight="370" DialogName="DialogBoxes/SelectResource.aspx" Text="Assign Resource" DefaultValue="" OnOnClose="mbAssignResource_OnClose"></MB:MessageBox>
</td>
:
:
 </ContentTemplate>
 <Triggers>
   <asp:AsyncPostBackTrigger ControlID="tree" EventName="NodeClick" />
   <asp:AsyncPostBackTrigger ControlID="btnDeleteNode" EventName="Click" />
   <asp:AsyncPostBackTrigger ControlID="btnAddNode" EventName="Click" />
   <asp:AsyncPostBackTrigger ControlID="popupAdPositionSelect" EventName="AddClick" />
 <asp:AsyncPostBackTrigger ControlID="popupAdSelect" EventName="AddClick" />
 <asp:AsyncPostBackTrigger ControlID="ddlViewBase" EventName="SelectedIndexChanged" />
 </Triggers>
</asp:UpdatePanel>
:
:

AdManager.aspx.cs のコードは次のとおりです。

:
:
namespace E6.WebUI {
public partial class AdManager : MasterBasePage {
:
:
    protected void mbAssignResource_OnClose(object sender, EventArgs e) {
        :
        :
    }
:
:
}

MessageBox.cs のコードには次のものがあります。

:
:
[DefaultProperty("Text"), ToolboxData("<{0}:MessageBox runat=server></{0}:MessageBox>")]
public class MessageBox : WebControl, IPostBackEventHandler
{
:
:
    [Description("The event which indicates when the dialog is closed.")]
    public event EventHandler OnClose;
:
:
    public void RaisePostBackEvent(String eventArgument)
    {      
        if (OnClose != null)
        {
            OnClose(this, new MessageBoxEventArgs(eventArgument));
        }
    }
    protected override void OnInit(EventArgs e)
    {
        // Guarantee that the __doPostBack function is defined
        this.Page.ClientScript.GetPostBackEventReference(this, "");
       :
       :
    }
:
:
}

SelectResource.aspx のコードには次のものがあります。

 :
 :
 <td>
 <asp:Button ID="SelectButton" runat="server" CssClass="wizardButton" ToolTip="Select" Text="Select"></asp:Button>
 </td>
 :
 :

SelectResource.aspx.cs のコードには次のものがあります。

:
:
namespace E6.WebUI
{
/// <summary>
/// Summary description for SelectResource.
/// </summary>
public class SelectResource : DialogBase
{
:
:
    private void InitializeComponent()
    {    
        :
        :
        this.SelectButton.Click += new System.EventHandler(this.SelectButton_Click);
        :
        :
    }
:
:
    private void SelectButton_Click(object sender, System.EventArgs e)
    {
       :
       :
            DialogReturn(Resources.Items[Resources.SelectedIndex].Value);
    }
}
}

DialogBase.cs のコードには次のものがあります。

:
:
public class DialogBase : PageBase
{
    public void DialogReturn(string returnValue)
    {
       // Set the value for the return object and close the dialog
        StringBuilder script = new StringBuilder("<script language='javascript'>\n");
        if (returnValue != null)
        {
            // clean return value
            string cleanReturnValue;
            cleanReturnValue = returnValue;
            cleanReturnValue = cleanReturnValue.Replace("'", "\\'");
            // once clean, append
            script.Append("top.window.returnValue='");
            script.Append(cleanReturnValue);
            script.Append("';\n");
        }
        //script.Append(" if(window.chrome) { alert('chrome');  __doPostBack('ctl00$contentPH$mbAssignResource', top.window.returnValue); alert(top.window.returnValue); }");
        //script.Append(" __doPostBack('ctl00$contentPH$mbAssignResource', top.window.returnValue); ");
        script.Append("top.window.close();\n");
        script.Append("</script>");

        ScriptManager.RegisterStartupScript(this, this.GetType(), "MsgBox", script.ToString(), false);
    }
:
:
}

MessageBox は、SelectResourcepage.aspx をポップアップするユーザー コントロールです。ユーザーが SelectResourcepage.aspx の選択ボタンをクリックすると、DialogReturn 関数が JavaScript をクライアントに送信して MessageBox ウィンドウを閉じます。これにより、MessageBox.cs の RaisePostBackEvent() 関数から onclose イベントがトリガーされます。

IE では正常に動作しますが、Chrome では動作しません。関数 RaisePostBackEvent に停止ポイントを配置すると。IE でポップアップ ウィンドウを閉じると、停止ポイントに達します。しかし、Chrome でポップアップ ウィンドウを閉じると、停止点に達しません。関数 DialogReturn (コメントアウトされているもの) に JavaScript を追加して、スクリプトが実行されるかどうかを確認しました。そしてそれは実行され、alert() でretrunValue を確認できます。ポップアップウィンドウが閉じます。しかし、RaisePostBackEvent() は起動しません。

この時点で私は無知です。なにか提案を?または問題を回避しますか?多くのユーザーがサポートを必要としている Chrome を使用しているため、上司が修正を求めているのは長い間存在していた古いコードです。ありがとうクリス

4

0 に答える 0