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

时间:2015-09-15 13:21:43

标签: c# jquery asp.net datagridview code-behind

我在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后,它将不再显示。

可能是什么原因?

2 个答案:

答案 0 :(得分:0)

您的代码是

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

这实际上是常规的html标记。 Microsoft ASP.NET不保持常规html标记的状态(即在ViewState中)。回发后,页面生命周期有效地创建了一个新的Page(System.Web.UI.Page)对象实例,然后将响应作为html发送回浏览器。

另一方面,一旦你改为

<asp:TextBox ID="datepickerfrom" runat="server" />

你会在回发中看到它。你在后面的代码中捕获这两个日期的方式已经过时(仅在ASP 1.1中看到)。

文本标签的命名空间是 System.Web.UI.HtmlControls.HtmlInputText和服务器标记的名称空间是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();
});

答案 1 :(得分:0)