RegisterStartupScript似乎不在更新面板中的页面回发上工作

时间:2010-06-09 06:57:29

标签: c# updatepanel registerstartupscript

好的 - 所以我正在使用一个使用自定义日期选择器控件的系统(我知道还有其他的...但为了保持一致性,我想了解为什么我当前的问题正在发生并修复它。)

因此,带有文本框的自定义用户控件和Page_PreRender执行此操作:

protected void Page_PreRender(object sender, EventArgs e)
    {

        string clientScript = @"
        $(function(){
        $('#" + this.Date1.ClientID + @"').datepicker({dateFormat: 'dd/mm/yy', constrainInput: true});
        });";
        Page.ClientScript.RegisterStartupScript(this.GetType(), this.ClientID, clientScript, true);

        //Type t = this.GetType();
        //if (!Page.ClientScript.IsStartupScriptRegistered(t, this.ClientID))
        //{
        //    Page.ClientScript.RegisterStartupScript(t, this.ClientID, clientScript, true);
        //}
    }

忽略注释掉的东西 - 那是我尝试不同的东西 - 没有帮助。

我的问题是,当我加载页面时,这一切都正常。但是,如果我从下拉列表中选择一些导致页面回发的内容 - 当我点击我的日期字段时,它们就会停止工作。就像我应该能够点击进入文本框一样,会出现一个漂亮的日历控件。但是在回发之后,没有出现漂亮的日历控件!

它目前全部包含在(在托管页面中)更新面板中。所以我评论了更新面板的东西,日期在页面回发后工作。所以它似乎与该更新面板有关。

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:29)

您是否尝试过ScriptManager而不是Page.ClientScript?我查看了之前使用UpdatePanels和jQuery编写的一些代码,并且我使用了ScriptManager。我认为如果脚本未在ScriptManager中注册,则在部分回发期间脚本不可用。

看起来像这样:

ScriptManager.RegisterStartupScript(Page, this.GetType(), "DatePickerScript", clientScript, true);
相关问题