代码之家  ›  专栏  ›  技术社区  ›  Azhar

页面上的多个UpdatePanel从文本框中删除JavaScript日期选择器日历

  •  2
  • Azhar  · 技术社区  · 14 年前

    实际上,我在页面上有多个更新面板,它们更新服务器上的不同值,但问题是我有一个文本框,我在其中附加了datepicker on Load事件的javascript类。

    但是在日期文本框之前还有其他updatepanel,当我用updatepanel中的日期控件更新它们时,第一个日历图像就会消失。或者它移除文本框旁边的日历。

    txtDate.Attributes.Add("class", "show-week w16em dateformat-d-sl-m-sl-Y"); 
    

    在使用任何updatepanel之前

    alt text

    在我们更新任何updatepanel控件之后,它是这样的。

    alt text

    但是,不在任何updatepanel中的日期控件都可以正常工作。

    在这些updatepanels中,我实际上将值保存在DataTables中,并将这些DataTables保存在viewState。。。。HTML没有变化。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Willem    14 年前

    我猜datepicker和它的文本框都放在updatepanel中了?

    如果使用UpdatePanels执行ajax回发,服务器将为页面上的所有UpdatePanels发送html,并刷新它们的所有内容,这样您的日期选择器将消失。

    如果你设置 UpdateMode=Conditional 在UpdatePanels上,只有导致回发的UpdatePanels才会更新。

    另一个选项是用ScriptManager.RegisterStartupScript,但这可能会重置其值(取决于它是哪个日期选择器)。

        2
  •  1
  •   KhanZeeshan    14 年前

    您是否正在更改文本框所在的DIV或表的INNERHTML,因为如果您正在更改,则在更新该DIV或表之后,它将删除日历控件。

        3
  •  1
  •   y34h    14 年前

    无论使用何种方法附加日期选择器,都必须在更新面板更新后再次调用

    你可以在服务器端使用 this :

    // at some point of the method that updates the panel
    ScriptManager.RegisterStartupScript(
        this, typeof(object), "someUniqueKey", "theScript();", true);
    

    或者在客户端:

    // <body onload='...'> or in the <head>
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
        function () { theScript() });
    
    推荐文章