Jquery日历在GridView被填充后不会重新加载

本文关键字:新加载 加载 日历 GridView 填充 Jquery | 更新日期: 2023-09-27 18:12:53

我有一个简单的页面,Jquery datepicker, UpdateProgressGridViewUpdatePanel里面。

这是该页的一个片段:

...
    Select From Date: <input type="text" id="datepickerfrom" name="datepickerfrom"/>
    Select To Date: <input type="text" id="datepickerto" name="datepickerto"/>
    <asp:Button ID="btnGetData" runat="server" OnClick="BtnGetData_Click" Text="Get Error List" />
    <asp:UpdateProgress ID="UpdateProgress1" runat="server">
        <ProgressTemplate>
           <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/ajax-loader.gif" />  
        </ProgressTemplate>
    </asp:UpdateProgress>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
      ...MyGrid...
    </ContentTemplate>
    </asp:UpdatePanel>
...

这是点击按钮时调用的code behind方法:

protected void BtnGetData_Click(object sender, EventArgs e)
{
    string dateFrom = HttpUtility.HtmlEncode(Request.Form["datepickerfrom"]);
    string dateTo = HttpUtility.HtmlEncode(Request.Form["datepickerto"]);
    InputData data = new InputData(dateFrom, dateTo);
    Session["inputData"] = data;
    gvErrorLog.PageIndex = 0;
    LoadLogErrorData(data);      
}

当我第一次加载页面并点击其中一个日期文本框时,jQuery datepicker弹出。当我刷新页面时,它也会弹出。

但是,在点击按钮并将数据填充到GridView之后,它不再显示。

原因是什么?

Jquery日历在GridView被填充后不会重新加载

你的标签是

<input type="text" id="datepickerfrom" name="datepickerfrom"/>

这实际上是一个普通的html标签。微软的ASP。. NET不保留常规html标签的状态(即ViewState)。回发后,页面生命周期在将响应以html形式发送回浏览器之前,有效地创建了page (System.Web.UI.Page)对象的新实例。

另一方面,一旦你改成
<asp:TextBox ID="datepickerfrom" runat="server" />

您将在回发中看到它。另外,在后面的代码中捕获这两个日期的方式已经过时了(只在ASP 1.1中看到)。

文本标记的名称空间为system . web . ui . webcontrols . htmlinputtext和server标签的命名空间是System.Web.UI.WebControls.TextBox。它们属于不同的命名空间。HtmlControls中的任何控件都是用于遗留目的的。

您可以更改为asp:TextBox并从后面的代码中访问它们,如下所示:

protected void BtnGetData_Click(object sender, EventArgs e)
{   
    string dateFrom = datepickerfrom.Text;  //  -- updated 
    string dateTo = datepickerto.Text;      //  -- updated 
    InputData data = new InputData(dateFrom, dateTo);
    Session["inputData"] = data;
    gvErrorLog.PageIndex = 0;
    LoadLogErrorData(data);  
}

如果你坚持你的标签,你可以添加一个隐藏变量,并在你的文本框的变化事件更新这些隐藏变量

我假设你的文本框设置如下

$(function () {
    $("#<%=datepickerfrom.ClientID%>").datepicker();
    $("#<%=datepickerto.ClientID%>").datepicker();
});

我终于找到了问题的答案:

http://www.jquerybyexample.net/2010/08/jquery-datepicker-does-not-work-after.html