2010-09-01 66 views
9

出于某种原因,正在处理的ASP.NET网站上的任何CalendarExtender都不会更新。我已经检查了所有显而易见的地方(例如AutoPostBack和AutoEventHandler)。问题是,当我从日历中选择一个日期并将其发布到表单时,正在更新的文本框被更新,但日历扩展器的日期根本没有被更新(例如,SelectedDate仍然和以前一样) 。我已经搜索了任何可能的解决方案,但都没有工作。ASP.NET Ajax CalendarExtender不会更新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   
     } 
    } 
} 

当我的代码达到 “做回发的行为”,txtBlahExtender.SelectedDate总是DateTime.Today.AddDays(4) 。它根本不记录更改。

任何想法?

感谢, Logain史密斯

(是否有可能做一个问题格式化?)

+0

我遇到了同样的问题 – Starwfanatic 2010-09-22 19:19:34

回答

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; 
} 

(在哪里等等是Text控制和blahCalendarExtender是扩展延长无)

看来,calendarExtender控件应该足够智能,以自己做到这一点,虽然。

+0

+1非常有用的修复。 – 2010-12-15 12:57:02

+1

我设置了** blahCalendarExtender.SelectedDate = null; **所以如果用户在** blah.Text **中插入了一些不可分析的日期,我就避免了问题。用户最后选择的日期由视图状态自动填充。 – Ephedra 2014-07-17 09:47:06

0

确保把texbox和扩展在一个UpdatePanel(我没有看到这个代码你提供)。

+0

更新 - 没有工作。在添加UpdatePanel后,该值立即恢复,所以初始值并拒绝让我改变。 – logain 2010-09-01 19:41:58

0

我发现了一个非常奇怪的解决方案。

不要初始化附有日历扩展程序的文本框的值。保持文本框空白。