2010-09-01 13 views
9

Pour une raison quelconque, tous les CalendarExtenders sur un site ASP.NET en cours de traitement ne seront pas mis à jour. J'ai déjà vérifié tous les endroits évidents (tels que AutoPostBack et AutoEventHandler). Le problème est que lorsque je sélectionne une date dans le calendrier et le publie sur le formulaire, le TextBox en cours de mise à jour est mis à jour, mais la date d'extension du calendrier n'est simplement pas mise à jour (par exemple SelectedDate est toujours identique) . J'ai cherché des solutions possibles mais aucune n'a fonctionné.ASP.NET Ajax CalendarExtender ne mettra pas à jour la valeur SelectedDate

Voici le code:

<%@ 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" /> 

et codebehind:

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

Lorsque mon code atteint "faire des actions postback", txtBlahExtender.SelectedDate est toujours DateTime.Today.AddDays (4) . Il ne suffit pas d'enregistrer le changement.

Des idées?

Merci, Logain Smith

(Est-il possible de faire le formatage sur une question?)

+0

Je rencontre le même problème – Starwfanatic

Répondre

15

Après une recherche innombrable sur Internet, il ne semble pas y avoir de solution à ce problème. Une solution (si vous voulez l'appeler ainsi) pourrait être d'attribuer manuellement SelectedDate en utilisant la conversion de la zone de texte (ce qui vous oblige à définir le format dans le balisage, bien):

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

(Où blah est le texte Control et blahCalendarExtender est le prolongateur blah)

Il semble que le contrôle calendarExtender devrait être assez intelligent pour le faire seul.

+0

+1 Correctif très utile. –

+1

J'ai mis ** blahCalendarExtender.SelectedDate = null; ** Donc, j'évite les problèmes si l'utilisateur a inséré une date non parseable dans ** blah.Text **. La dernière date choisie par l'utilisateur est automatiquement renseignée par l'état d'affichage. – Ephedra

0

Assurez-vous de mettre le TexBox et d'extension dans un UpdatePanel (je ne vois pas cela dans le code vous avez fourni).

+0

Mise à jour - n'a pas fonctionné. Après avoir ajouté le UpdatePanel la valeur rétablit immédiatement ainsi la valeur initiale et refuse de me laisser changer. – logain

0

J'ai trouvé une solution très étrange pour cela. N'initialisez pas la valeur de la zone de texte associée à l'extendeur de calendrier.

Laissez la zone de texte vide.