Захватить значение из раскрывающегося списка, где отображаемый раскрывающийся список не является значением по умолчанию - PullRequest
0 голосов
/ 31 октября 2018

Я хочу сохранить выбранную дату в моем списке DropDown, где пять дней будут отображаться на DropdownList.

Обычно я устанавливаю значение по умолчанию на DropDown, но не в этот раз, потому что в раскрывающемся списке я хочу, чтобы он всегда отображал текущую дату и следующие пять дней. Но я не знаю, как получить данные.

<asp:DropDownList ID="ddldate" runat="server">
</asp:DropDownList>

protected void Page_Load(object sender, EventArgs e)
{
    List<ListItem> items = new List<ListItem>();

    for (int i = 0; i < 5; i++)
    {
        items.Add(new ListItem(
          DateTime.Now.AddDays(i).ToShortDateString(), 
          DateTime.Now.AddDays(i).ToShortDateString()));
    }
    ddldate.DataSource = items;
    ddldate.DataBind();
    ddldate.Items[0].Selected = true;
}

protected void Button1_Click(object sender, EventArgs e)
{
    string deliverytime = ddldate.SelectedValue.ToString();
    lbltest.Text = deliverytime;
}

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы повторно заполняете DropDownList для каждой обратной передачи и перезагружаете страницу, поэтому значение свойства SelectedValue может отличаться от объявленного значения. Просто поставьте отметку против IsPostBack, чтобы предотвратить повторное заполнение данных DropDownList при обратной передаче:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        List<ListItem> items = new List<ListItem>();

        for (int i = 0; i < 5; i++)
        {
           items.Add(new ListItem(DateTime.Now.AddDays(i).ToShortDateString(), DateTime.Now.AddDays(i).ToShortDateString()));
        }

        ddldate.DataSource = items;
        ddldate.DataBind();
        ddldate.Items[0].Selected = true;
    }
}
0 голосов
/ 31 октября 2018

Вы не должны связывать данные на PostBack, измените код FormLoad на образец ниже:

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        List<ListItem> items = new List<ListItem>();

        for (int i = 0; i < 5; i++)
        {
            items.Add(new ListItem(DateTime.Now.AddDays(i).ToShortDateString(), DateTime.Now.AddDays(i).ToShortDateString()));
        }
        ddldate.DataSource = items;
        ddldate.DataBind();
        ddldate.Items[0].Selected = true;
    }   
}

Если вы проверите свойство PostBack как условие, ваш SelectedValue сохранится, в противном случае DropDown будет привязываться к каждой странице-публикации.

И я также рекомендую вам проверить статус SelectedValue перед его использованием, не пытайтесь получить значение, если это null, проверьте следующий код:

protected void Button1_Click(object sender, EventArgs e)
{
    if(ddldate.SelectedValue != null)
    {
        string deliverytime = ddldate.SelectedValue.ToString();
        lbltest.Text = deliverytime;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...