Ajax / Asp.Net更新面板问题

时间:2011-05-05 13:24:00

标签: jquery asp.net ajax updatepanel

我有一个更新面板,但它似乎是在更新后从我的一个输入中删除了一个类

这是第一次加载时的代码

<input type="text" class="txt1 hasDatepicker" id="txt1" name="txt1">

这是更新运行后的代码

<input type="text" class="txt1" id="txt1" name="txt1">

这是运行客户端的jQuery

 $(function() {
     $(".txt1").datepicker({ dateFormat: 'D d M yy' }); 
 });

似乎只是在更新运行后删除hasDatepicker类,这会导致问题。

为什么会这样做?

2 个答案:

答案 0 :(得分:3)

jQuery ready事件只会在第一次加载页面时触发。它甚至没有检测到从jQuery本身调用的AJAX更新,因为该页面已经存在。

但是,在服务器上有一个类似于Page_Load的方法,如果它存在于JavaScript全局范围内,一旦页面加载就会调用它 - 在ASP.NET术语中,这是第一次或部分回发/异步更新之后/ ajax刷新。

该名称与JavaScript约定略有不同:

function pageLoad(){   
    $(".txt1").datepicker({ dateFormat: 'D d M yy' }); 
}

尝试并在评论中告诉我它是否有用......

另一个答案(获取脚本管理器引用,然后调用add_pageLoaded()并传递函数)就像在服务器端执行this.Load += new ....时在ServerSide中,而这个是Page_Load版本(默认情况下启用事件连接)。当然我的意思是他们在客户端的对应不完全相同。所以,两者都很好,两者都应该有效,但如果你有多个加载事件处理程序,那么第二种方法会很有用,这会使事情变得更加复杂。

答案 1 :(得分:1)

您需要使用PageRequestManager,它需要页面上的ScriptManager。您可以将其声明为<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>,然后将PageRequestManager实例化为:

<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_pageLoaded(SomeFunction);
    prm.add_pageLoaded(function() {});

    function SomeFunction() {}
</script>