Ajax CalendarExtender, как получить дату после нажатия на кнопку? - PullRequest
1 голос
/ 22 сентября 2011

Я хочу добавить добавить Ajax CalendarExtender на мою страницу. А затем, выбрав дату и нажав на кнопку, я получаю выбранный день на этикетке.

У меня есть текстовое поле, которое является целью CalendarExtender

<asp:TextBox ID="DateText" runat="server" ReadOnly="true" ></asp:TextBox>

<ajaxToolkit:CalendarExtender 
    ID="Calendar1"
    runat="server"
    TargetControlID="DateText"
    Format="MMMM d, yyyy"
    PopupPosition="Right"
    />

<asp:Button runat="server" ID="Button1" onclick="Button1_Click" />

В коде позади :

На первой странице загрузки я установил дату на Сегодня.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Calendar1.SelectedDate = DateTime.Today;
    }
}

В событии Button1_Click

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = Calendar1.SelectedDate.Value.Day.ToString();
}

Проблема заключается в том, что, когда я нажимаю кнопку (или после любого поста), выбранное значение сбрасывается до сегодняшней даты.

И если я не установлю его на DateTime.Today в Page_Load, он сбрасывается в ноль и выдает исключение NULL.

Как я могу решить это?

Большое спасибо за любую помощь. Я надеюсь, что я был ясен

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

Решением проблемы является использование коллекций Request.Form.Поскольку эта коллекция имеет значения всех полей, которые отправляются обратно на сервер, а также имеет значения, которые устанавливаются с помощью клиентских сценариев, таких как JavaScript.

Таким образом, нам нужно внести небольшое изменение в то, как мывыборка на стороне сервера значений.

C #

protected void Submit(object sender, EventArgs e)
{
   string date = Request.Form[txtDate.UniqueID];
} 
0 голосов
/ 22 сентября 2011

Может быть, это будет работать:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if(!Calendar1.SelectedDate)
            Calendar1.SelectedDate = DateTime.Today;
    }
}
...