出于某种原因,正在处理的ASP.NET站点上的任何CalendarExtender都不会更新。我已经检查了所有明显的位置(例如AutoPostBack和AutoEventHandler)。问题是,当我从日历中选择一个日期并将其发布到表单时,正在更新正在扩展的TextBox,但日历扩展程序的日期根本没有被更新(例如,SelectedDate仍然与之前相同) 。我已经搜索了任何可能的解决方案,但没有一个有效。
以下是代码:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master"
AutoEventWireup="true" CodeBehind="ThePage.aspx.cs" Inherits="ThePage" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<asp:TextBox runat="server" ID="txtBlah" />
<asp:CalendarExtender ID="txtBlahExtender" runat="server" TargetControlID="txtBlah" Format="MMMM d, yyyy" />
<asp:Button runat="server" ID="btnSubmit" CausesValidation="false" />
和代码隐藏:
public partial class ThePage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
txtBlahExtender.SelectedDate = DateTime.Today.AddDays(4);
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
//do postback actions
}
}
}
当我的代码达到“do postback actions”时,txtBlahExtender.SelectedDate总是DateTime.Today.AddDays(4)。它根本没有记录变化。
有什么想法吗?
谢谢, 洛根史密斯
(是否可以对问题进行格式化?)
答案 0 :(得分:15)
无数次搜索互联网后,似乎没有解决此问题的方法。解决方案(如果你想称之为)可以是使用文本框中的转换手动分配SelectedDate(这需要你在标记中设置格式):
if(IsPostBack) {
blahCalendarExtender.SelectedDate = DateTime.ParseExact(blah.Text, blahCalendarExtender.Format, null);
// do postback actions
} else {
// for instance, maybe initalize blahCalendarExtender to today
blahCalendarExtender.SelectedDate = DateTime.Today;
}
(其中blah是文本控件,而blahCalendarExtender是扩展等等的扩展器)
似乎calendarExtender控件应该足够智能,可以自行完成。
答案 1 :(得分:0)
确保将文本框和扩展程序放在UpdatePanel中(我在您提供的代码中没有看到这一点。)
答案 2 :(得分:0)
我找到了一个非常奇怪的解决方案。
不要初始化附加了日历扩展程序的文本框的值。将文本框保留为空白。