2010-09-01 8 views
9

Per qualche motivo, qualsiasi CalendarExtender su un sito ASP.NET su cui si sta lavorando non verrà aggiornato. Ho già controllato tutti i posti più ovvi (come AutoPostBack e AutoEventHandler). Il problema è che quando seleziono una data dal Calendario e la invio al modulo, il TextBox che si sta estendendo è in fase di aggiornamento, ma la data dell'extender del calendario semplicemente non viene aggiornata (ad esempio SelectedDate è sempre lo stesso di prima) . Ho cercato su Google tutte le possibili soluzioni, ma nessuna ha funzionato.ASP.NET Ajax CalendarExtender non aggiornerà il valore SelectedDate

Ecco il codice:

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

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

Quando il mio codice raggiunge "fare azioni di postback", txtBlahExtender.SelectedDate è SEMPRE DateTime.Today.AddDays (4) . Semplicemente non registra la modifica.

Qualche idea?

Grazie, Logain Smith

(E 'possibile fare la formattazione su una domanda?)

+0

Sto correndo lo stesso problema Aggiornamento – Starwfanatic

risposta

15

Dopo aver cercato su Internet innumerevoli volte, non sembra esserci una soluzione per questo problema. Una soluzione (se si vuole chiamare così) potrebbe essere quella di assegnare manualmente SelectedDate utilizzando la conversione dalla casella di testo (questo richiede di impostare il formato nel markup, però):

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

(Dove bla è il testo Control e blahCalendarExtender è l'extender che estende blah)

Sembra che il controllo calendarExtender debba essere abbastanza intelligente da farlo da solo.

+0

+1 Correzione molto utile. –

+1

Ho impostato ** blahCalendarExtender.SelectedDate = null; ** Così evito problemi se l'utente ha inserito alcune date non parsing in ** blah.Text **. L'ultima data scelta dall'utente viene compilata automaticamente dallo stato di visualizzazione. – Ephedra

0

Assicurarsi di mettere il texbox ed estensore in un UpdatePanel (non vedo questo nel codice hai fornito).

+0

- non ha funzionato. Dopo aver aggiunto UpdatePanel, il valore ritorna immediatamente in modo tale che il valore iniziale e si rifiuta di lasciare la modifica. – logain

0

Ho trovato una soluzione molto strana per questo.

Non inizializzare il valore per la casella di testo che include l'estensione del calendario. Mantieni la casella di testo vuota.

Problemi correlati