使用RegisterStartupScript在极端注册JavaScript警报

时间:2016-06-01 14:45:02

标签: asp.net asp.net-ajax

注意:只是为了澄清问题与C1WebDateEdit没有特别关系。它可以与任何需要JavaScript来呈现实际控制的自定义控件) 我的页面中有很多C1WebDateEdit控件。在基于某些条件的按钮单击时,我显示JavaScript警报消息ScriptManager.RegisterStartupScript。这些控件位于UpdatePanel中。我面临的问题是,当这些C1WebDateEdit没有值并且页面显示警告消息时,它在警告框后面显示“01/01/0001”,在关闭警报时显示空文本框。
原因是,C1WebDateEdit使用JavaScript创建实际控件。在C1WebDateEdit控制'JavaScript之前,页面呈现警告消息JavaScript
例如:
HTML标记
提醒JavaScript C1WebDateEdit JavaScript

逻辑解决方案是在C1WebDateEdit JavaScript之后获取警报JavaScript,因为它将允许C1WebDateEdit在警报框之前完全加载。
我发现在asp.net中没有内置的方式来改变序列,所以我尝试给出here的解决方案,但它对我不起作用。
一个可能的解决方案我认为我创建了Custom或WebUserControl并在UpdatePanel和PreRender事件的页面最后放置它我调用ScriptManager.RegisterStartupScript来注册警报消息。从逻辑上讲,我认为它会起作用但是试图找到任何一个实现任何其他解决方案吗?。

1 个答案:

答案 0 :(得分:0)

其他可能的解决方案是使用PageRequestManager的“pageLoaded”事件。我在下面创建了临时修复功能:

function delayedAlertBox(strMsg)
{
    var fnc = function (a, b)
    {
        //remove reference so on next call it do not show previous alerts.
        Sys.WebForms.PageRequestManager.getInstance().remove_pageLoaded(fnc);
        alert(strMsg);
    }

    //add function reference to call on Ajax pageloaded event
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(fnc);
}

并在asp.net中调用如下所示的简单函数:

ScriptManager.RegisterStartupScript(Page, Page.GetType(), "dd", "delayedAlertBox('Hi, how are you?')", True)


但仍在寻找任何其他好的选择。如果我找到了其他的,我会发布它。