ASP.NET中UpdatePanel与jQuery同时使用所遇问题解决

今天,在.NET中使用了UpdatePanel,里面的输入框使用了jQuery的日历选择器:


代码如下:

<script type="text/javascript">
$(function(){
$("#ctl00_ContentPlaceHolder1_txtDateFrom").datepicker({
inline: true,
dayNamesMin:["日","一","二","三","四","五","六"],//区域化周名为中文
firstDay:1,//每周从周一开始
//区域化月名为中文习惯 monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],
showMonthAfterYear:true,//月份显示在年后面
yearSuffix:"年",//年份后缀字符
changeYear:true,
changeMonth:true,
showButtonPanel:true,//显示按钮面板
currentText:"今天",//当前日期按钮上的文本
closeText:"关闭",//关闭按钮上的文本
dateFormat:"yy-mm-dd"
});
}
</script>

运行之后正常:
 
可是,运行之后,点击"查询",页面局部刷新,发现日历选择器不出来了,找了很多资料,他们讲:
分析1:UpdatePanel
UpdatePanel在应用中主要用于局部刷新,避免整个页面的Postback。
UpdatePanel实现局部刷新的核心在于MicrosoftAjaxWebForm.js文件,它的局部刷新过程就是将页面提交到服务端(包 含ViewState),执行服务端代码后异步将在UpdatePanel内的HTML进行重新呈现。
在此过程中,页面的其它部分并没有状态更改。
分析2:jQuery
jQuery可以通过简单的代码对 HTML元素添加各种属性和事件句柄,我们可以在这里看到官方的文档:
Tutorials:How jQuery Works
http://docs.jquery.com/How_jQuery_Works
在这里,我们可以得知,jQuery有个重要的事件标记“ready”,一般 对HTML元素的效果和事件句柄都通过这个ready事件来添加,如下:
$(document).ready(function () {
$("p").text("The DOM is now loaded and can be manipulated.");
});
官方对此的说明是:ready事件会在DOM完全加载后运行一次,OK,至此,问题的原因差不多明白了:
原因:
因为在UpdatePanel局部刷新之后,其中的文本框元素被重写,而此时整个DOM树并没有重新加载,所以jQuery的ready事件并没有触 发,所以文本框元素就失去了原有的特效。
解决方案
我们可以将ready事件中执行的代码提取出来:


代码如下:

<script type="text/javascript">
function showdatepicker(){
$("#ctl00_ContentPlaceHolder1_txtDateFrom").datepicker({
inline: true,
dayNamesMin:["日","一","二","三","四","五","六"],//区域化周名为中文
firstDay:1,//每周从周一开始
//区域化月名为中文习惯 monthNames:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],
showMonthAfterYear:true,//月份显示在年后面
yearSuffix:"年",//年份后缀字符
changeYear:true,
changeMonth:true,
showButtonPanel:true,//显示按钮面板
currentText:"今天",//当前日期按钮上的文本
closeText:"关闭",//关闭按钮上的文本
dateFormat:"yy-mm-dd"
});
}
</script>

在jQuery中也放入这个函数


代码如下:

<script type="text/javascript">
$(function(){
showdatepicker();
});
</script>

然后通过捕获ScriptManager的EndRequest事件,在每次 UpdatePanel局部刷新之后执行一次jQuery初始化代码,如下所示:


代码如下:

<script type="text/javascript">
function load(){
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
}
function EndRequestHandler() {
showdatepicker();
}
</script>

最后,再在<body>中加上load()函数,即:


代码如下:

<body onload="load()">

这样,即便UpdatePanel局部刷新,jQuery代码也能执行。

(0)

相关推荐

  • asp.net Coolite TablePanel使用

    其中用得最多的就是他的Tabs属性,用于定义子标签选项,可参考下图所示:                    其中content.html的代码如下代码片段,下图为运行效果截图: 复制代码 代码如下: <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title></title> <style type="text/css"> body{font-s

  • ASP.Net PlaceHolder、Panel等控件未实现INamingContainer,导致FindControl无效

    代码如下: 复制代码 代码如下: Panel spnButtons = new Panel(); Button btn = new Button(); btn.ID = "btn1"; spnButtons.Controls.Add(btn); // 输出True,表示没有找到控件 Response.Write(spnButtons.FindControl(btn.ID) == null); 而如果是下面的代码就可以了: 复制代码 代码如下: Panel spnButtons = ne

  • asp.net通过Ajax UpdatePanel回传后滚动条位置变更解决方法

    主要方法是: 用一个隐藏控件保存当前scorll值.回传回来后根据scroll的值在重新设置scroll. 1.首先用onscroll事件保存scorll值,并用HiddenField记录scroll值 复制代码 代码如下: <div id="lv_content" class="unify_content" style="padding-left: 0; height: 455px;" onscroll="SetScrollPo

  • asp.net UpdatePanel实现无刷新上传图片

    1)前台 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o

  • asp.net UpdatePanel的简单用法

    UpdatePanel控制页面的局部更新,这个更新功能依赖于scriptManger控件的EnablePartialRendering属性,如果这个属性设置为false局部更新会失去作用(scriptManger控件的EnablePartialRendering属性的默认值为true不必刻意去设置) 下面是一个完整的UpdatePanel的结构:  复制代码 代码如下: <asp:ScriptManager ID="ScriptManager1" runat="serv

  • asp.net updatepanel 导致JS不能加载,而无法使用的解决方法

    复制代码 代码如下: <script type="text/javascript" language="javascript">    var prm = Sys.WebForms.PageRequestManager.getInstance();    prm.add_endRequest(function () {        // re-bind your jquery events here          $(document).ready

  • asp.net页面触发事件panel滚动条高度不变的实现方法

    此文是为解决asp.net页面按钮点击触发事件后panel滚动条非自动回到顶端的解决方案,对于页面触发一个事件后,panel滚动条重新回到顶端,做下面的工作每次都要往下拉一下,特别是选择TreeView的时候,这个问题非常头疼,受到this.MaintainScrollPositionOnPostBack = true;的启示有感而发. 原理是在点击时保存panel滚动条的位置,页面触发事件完成后加载时重新赋值.保证页面每次点击都保存,就包含所有的按钮和别的点击事件. 步骤: 1.脚本 <hea

  • asp.net ext treepanel 动态加载XML的实现方法

    解决办法:写一个aspx页面, 在aspx 页面只留下这一句  复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Data.aspx.cs" Inherits="Data" %> cs文件如下: public partial class Data : System.Web.UI.Page { protected void Page_

  • ASP.NET中 Panel 控件的使用方法

    Panel 控件在 ASP.NET 网页中提供一种容器控件,可以将它用作静态文本和其他控件的父控件. 一.常见 Panel 属性 属性 描述 HorizontalAlign 指定子控件在面板内的对齐方式(左对齐.右对齐.居中或两端对齐). Wrap 指定面板内过宽的内容是要换到下一行,还是要在面板边缘处截断. ScrollBars 如果已经通过设置 Height 和 Width 属性将 Panel 控件限制为特定的大小,则可以通过设置 ScrollBars 属性来添加滚动条. GroupingT

  • ASP.NET中UpdatePanel与jQuery同时使用所遇问题解决

    今天,在.NET中使用了UpdatePanel,里面的输入框使用了jQuery的日历选择器: 复制代码 代码如下: <script type="text/javascript"> $(function(){ $("#ctl00_ContentPlaceHolder1_txtDateFrom").datepicker({ inline: true, dayNamesMin:["日","一","二"

  • Asp.net中UpdatePanel的用法详解

    Asp.net UpdatePanel 允许用户构建一个丰富的,以客户端为中心的应用程序,引用UpdatePanel控件,能够实现页面的部分刷新,一个包含scriptManage和 UpdatePanel控件的页面自动具有页面部分刷新的功能,不需要写任何的客户端JavaScript代码.一个web页面只能包含一个 ScriptManage控件,但可以包含一个或多个UpdatePanel控件. 使用UpdatePanel控件实现页面的局部更新,需要包含一个ScriptManage控件,并且必须将S

  • asp.net中js和jquery调用ashx的不同方法分享

    =============js================ 复制代码 代码如下: var xhr = new XMLHttpRequest();            xhr.open("get", 'Controls/gengCart.ashx?CartID=' + input + '&count=' + inp, true);            xhr.setRequestHeader("If-Modified-Since", "0&q

  • ASP.NET中实现jQuery Validation-Engine的Ajax验证实现代码

    见下图: 验证的例子:http://www.position-relative.net/creation/formValidator/ 官方地址: http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/ 这个插件支持大部分的浏览器,但由于有使用到了css3的阴影和圆角样式,所以在IE浏览器下无法看到圆角和阴影效果(IE 9 支持圆角效果). 本文主要内容是

  • ASP.NET中实现jQuery Validation-Engine的Ajax验证

    见下图: 验证的例子:http://www.position-relative.net/creation/formValidator/ 官方地址: http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/ 这个插件支持大部分的浏览器,但由于有使用到了css3的阴影和圆角样式,所以在IE浏览器下无法看到圆角和阴影效果(IE 9 支持圆角效果). 本文主要内容是

  • asp.net中Timer无刷新定时器的实现方法

    本文实例讲述了asp.net中Timer无刷新定时器的实现方法.Timer控件要实现无刷新,得用到ajax技术,这里使用VS2008自带的ajax技术.    首先得添加一个ScriptManager控件,然后再添加一个UpdatePanel用于存放Timer控件内容的,就可以实现无刷新了.下面是详细的内容: 一.前台代码如下: <form id="form1" runat="server"> <asp:ScriptManager ID="

  • asp.net中使用 Repeater控件拖拽实现排序并同步数据库字段排序

    数据库表中有一个单位表,里面包括ID.Name.Order等字段,现在有个后台管理功能,可以设置这些单位在某些统计表格中的先后显示顺序,于是想到用拖拽方式实现,这样操作起来更简便. 使用了GifCam软件做了一个示例动画,效果如下图所示: 于是就动手起来,发现jquery.ui中提供sortable函数,可用于排序,界面中从数据库绑定的单位使用Repeater控件,下面简单介绍下主要步骤: 1.项目中使用到的jquery-1.7.2.min.js和jquery-ui.min.js请点击进行下载,

  • ASP.NET中Ajax怎么使用

    在ASP.NET中应用Ajax的格式如下: 前台代码(用JQuery库) $.ajax({ type: "POST", async: true, url: "../Ajax/ajax.ashx", dataType: "html", data: null success: function (result) { //do successful sth }, error: function (XMLHttpRequest, textStaus, e

  • 解决ASP.NET中的各种乱码问题总结

    经常发现有人被乱码困扰着,而我感觉比较幸运,很少为此烦恼过. 在这篇博客中,我将把我想到的一些与乱码有关的经验总结出来,供大家参考. 页面显示乱码问题 在一个网站中,有些页面会正常显示,然而,有些页面会显示成乱码. 如果发生这种情况,可以检查一下web.config和文件编码. 如果web.config是这样配置的: <globalization fileEncoding="utf-8" /> 而文件的编码不是UTF-8: 那么就会有乱码问题. 注意:反之是不是会出现乱码的

  • Asp.net中安全退出时清空Session或Cookie的实例代码

    概览: 网站中点击退出,如果仅仅是重定向到登录/出页面,此时在浏览器地址栏中输入登录后的某个页面地址如主页,你会发现不用登录就能访问.这种所谓的退出并不是安全的. 那么怎样做到安全退出呢? 那就是点击退出后清空相应的Session或Cookie. 清空Session的代码: Session.Clear(); Session.Abandon(); 清除Cookie的正确代码(假设Cookie名称为UserInfo): if (Request.Cookies["UserInfo"] !=

随机推荐