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

Posted

技术标签:

【中文标题】页面上的多个更新面板从文本框中删除 JavaScript Datepicker 日历【英文标题】:Multiple updatepanels on page remove JavaScript Datepicker calender from textbox 【发布时间】:2011-04-21 15:53:19 【问题描述】:

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

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

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

在使用任何更新面板之前都是这样

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

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

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

【问题讨论】:

【参考方案1】:

我猜日期选择器和它的文本框都放在了更新面板中?

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

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

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

【讨论】:

好的...但是如果该更新面板也回发或在服务器上更新下次同样的 JavaScript 问题将再次出现 是的,那么每次面板更新时,您都必须使用 javascript 重新创建日期选择器,但如何做到这一点完全取决于您使用的日期选择器。我猜你在加载时运行了一些代码,尝试在 (ajax-)postback 上加载该代码。【参考方案2】:

您是否更改了包含 TextBox 的 DIV 或 TABLE 的 INNERHTML,因为如果您要在更新 DIV 或 TABLE 后删除日历控件。

【讨论】:

no .... 在这些面板中,我实际上将值保存在 DataTables 中,而我将它们保存在 viewState .... HTML 中没有变化。 那么你必须在每个 ajax 请求之后重新绑定日历控件,就像 y34h 建议的那样。重新装订日历; Sys.Application.add_init(function() $create(AjaxControlToolkit.CalendarBehavior, "button":$get(""),"cssClass":"cal_Theme1","format":"MM/ dd/yyyy","id":"","popupPosition":1, null, null, $get("")); );【参考方案3】:

无论您使用什么方法来附加日期选择器,您必须在更新面板更新后再次调用

你可以在服务器端使用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() );

【讨论】:

以上是关于页面上的多个更新面板从文本框中删除 JavaScript Datepicker 日历的主要内容,如果未能解决你的问题,请参考以下文章

根据在另一个文本框中键入的文本,使用 AJAX 更新面板在 ASP.NET 中自动填充文本框

更新 AJAX 手风琴内的 DataGrid

无法从文本框中获取更新的值

页面jquery上的多个依赖选择框

更新从读取字典的 for 循环生成的 QLineEdit 文本框中的文本

从文本框中删除自动搜索并在搜索按钮上搜索