页面上的多个updatepanel从文本框中删除JavaScript Datepicker日历

时间:2010-10-06 06:23:25

标签: javascript asp.net ajax updatepanel datepicker

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

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

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

在使用任何更新面板之前,就像这样

alt text

在我们更新任何updatepanel控件后,就像这样。

alt text

但是任何更新面板中没有的日期控件都可以正常工作。

在这些更新面板中,我实际上在DataTables中保存了值,并将这些DataTable保存在viewState中....没有HTML的变化。

3 个答案:

答案 0 :(得分:2)

我想datepicker及其文本框都放在updatepanel中?

如果您使用UpdatePanels执行ajax-postback,服务器将为页面上的所有UpdatePanel发回html,并刷新其所有内容,因此您的日期选择器将消失。

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

另一种选择是使用ScriptManager.RegisterStartupScript重新创建日期选择器,但这可能会重置其值(取决于它的日期选择器)。

答案 1 :(得分:1)

您是否正在更改存在TextBox的DIV或TABLE的INNERHTML,因为如果您正在更新DIV或TABLE之后删除日历控件。

答案 2 :(得分:1)

无论您使用哪种方法来附加日期选择器,都必须在updatepanel更新后再次调用

您可以使用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() });