【问题标题】:Sys.Application.add_load Problem with Modal popup extenderSys.Application.add_load 模态弹出扩展器的问题
【发布时间】:2010-10-07 05:13:03
【问题描述】:

我有当前的问题,让我们解释一下之前的上下文:

我有一个包含表单的模态弹出扩展器。有一个功能“保存并添加新”,当用户单击此按钮时,表单中的数据在回发期间保存在数据库中并重新加载页面。

我希望此 Modal 弹出窗口再次出现在 page_load 上,允许用户输入新数据而无需再次单击显示此 Modal Popup 的按钮。

我试着先这样称呼它:

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "ShowModalPopup(""" & Me.formModalButton.ID & """);", True)

但问题是当调用该函数时,我的模态弹出窗口在页面上尚不存在。因此,代码在

上崩溃了
var modal = $find('myModal');

所以,我发现了另一种方式,它几乎完美地工作。

ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "Sys.Application.add_load(function() {ShowModalPopup(""" & Me.formModalButton.ID & """)};", True)

模态显示在我想要的页面加载中,但问题是如果我单击页面上的任何其他按钮,模态弹出窗口也会再次出现。

示例:我有另一个用于删除数据的 Modal Popup,当我点击按钮时,两个 Modal 都出现了,这并不酷。

有没有人知道如何解决这个问题或更好的方法?

附:我没有调用 Modal 弹出服务器端,因为页面中存在 javascript 函数,所以我不想在 RegisterStartupScript 中创建此函数的副本。

感谢您的宝贵时间。

【问题讨论】:

    标签: asp.net javascript ajax asp.net-ajax ajaxcontroltoolkit


    【解决方案1】:

    使用下面的代码sn-p

    //Declares gloabal variable
    ClientScript.RegisterStartupScript(Page.GetType(),"vardeclaration","var reloadModal;",true);
    
    ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "Sys.Application.add_load(
    
    function() 
    {
       reloadModal = function() {ShowAddModalPopup(""" & Me.imgAdd.ID & """);};
       Sys.Application.add_init(reloadModal);
    }
    );", True)
    

    这将允许您使用

    function cancelClick()
    {
       Sys.application.remove_init(reloadModal);
    }
    

    【讨论】:

    • 您好,首先感谢您的回复。不幸的是,如果我使用 Sys.Application.add_init 而不是 add_load 我会遇到与以前相同的问题,调用该函数时我的模态弹出扩展器不存在,所以我在 $find('myModal ')。
    • @ForceMagic :对不起,我看错了。您不能仅在服务器端单击特定按钮时注册此脚本吗?
    • 是的,我可以这样做,但是一旦注册了脚本,问题仍然存在。也许我应该尝试在取消按钮上卸载。使用 Sys.application.remove_load 实际上,当用户单击取消时,脚本会停留在那里,因此当页面上发生单击时,Modal 会再次弹出。
    • 可以在回发之前删除客户端的脚本吗?
    • 我觉得可以,我试试!实际上,我改变了调用函数的方式,并且您对 add_init 的建议有效!所以我会尝试从取消按钮上的负载中删除!如果它有效,我会发回我的解决方案! :)
    【解决方案2】:

    我终于找到了解决当前问题的方法。

    我仍在使用 ClientScript.Resgister[...] 但这次我还更改了取消按钮的 OnClientClick Javascript 函数。

    因此,当这个人选择“保存并添加新”功能时,当页面重新加载和模式再次显示时,如果他单击取消,我会回发到服务器只是为了重新加载页面并解决那些奇怪的行为。

    我也认为,由于我的代码中的更新面板不同,问题可能存在,但我需要它们来使 Modal Popup Extender 工作。

    无论如何,我发现它甚至不能在 Opera 和 Safari 中工作,而是整个事情(Ajax 控制工具包 - 模态弹出扩展器)。

    这是一个机会,这里的公司不关心其他,只支持官方的 IE。就我而言,我想让它至少在 FF 和 Chrome 中也能工作。

    ClientScript.RegisterStartupScript(Page.GetType(), "ModalPopup", "Sys.Application.add_load(function() {ShowAddModalPopup(""" & Me.imgAdd.ID & """)});", True)
                    btnCancel.OnClientClick = "resetDefaultValue();__doPostBack('" & btnCancel.ID & "','onclick')"
    

    所以有代码,在FF中也出现另一个错误,

    Sys.WebForms.PageRequestManagerServerErrorException:处理服务器上的请求时发生未知错误。服务器返回的状态码为:0

    我找到了这个解决方法,它不是最好的,但我为此浪费了足够多的时间......

    ClientScript.RegisterStartupScript(Page.GetType(), "WorkAroundFF", "Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest); function endRequest(sender, args) { /* Check to see if there's an error on this request.*/ if (args.get_error() != undefined) { $get('Error').style.visibility = ""visible""; /* Let the framework know that the error is handled, so it doesn't throw the JavaScript*/ alert. args.set_errorHandled(true); } }", True)
    

    感谢您的帮助 Ramesh,如果不是我的更新面板,我很确定您的解决方案会起作用。

    希望能对其他人有所帮助。

    【讨论】:

    • 其实我也觉得我还在VS2005的framework 2.0上可能会带来更多的麻烦。我们的 Ajax Control Toolkit 不在最后一个版本上,所以我想我会暂时禁用该功能并稍后在 VS2008 上对其进行测试,因为我有其他类型的错误,我确信它支持他们。跨度>
    猜你喜欢
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多