выпадающее выбранное значение неверно, когда значения загружаются через jquery

#javascript #jquery #asp.net

#javascript #jquery #asp.net

Вопрос:

У меня есть 2 выпадающих списка, ddlYear и ddlMonth. В обоих выпадающих списках значения загружены в ASP.Net C # во время загрузки страницы. (Год — это финансовый год, который начинается с июля по июнь. Для 2014-2015 годов мне нужно показать только июль. для 2013-2014 годов список месяцев с июля по июнь) При изменении года я загружаю месяцы с помощью jquery на стороне клиента.

  $('#ddlMonth').empty();
            $.each(data, function (index2, val) {
                $('#ddlMonth').append($('<option></option>').val(val.Key).html(val.Value));
            });
  

Если я обращаюсь к выбранному значению с помощью jquery $ («#ddlMonth»).val(), оно отображается правильно. Однако, если я выбираю значение из ASP.Net C # ddlMonth.Выбранное значение выдает неправильное значение / начальное значение по умолчанию.
Вот мой код на c #

  protected void Page_Load(object sender, EventArgs e)
        { 
        if (!this.IsPostBack)
            {
        ddlFiscalYear.Items.Add(new ListItem(fiscalYearStart.ToString()   "-"   (fiscalYearStart   1).ToString(),       fiscalYearStart.ToString()));
                ddlFiscalYear.SelectedValue = fiscalYearStart.ToString();
        var months = GetMonthsForFiscalYear(fiscalYearStart);
        foreach (DateTime month in months)
                {
                    if (month < DateTime.Now)
                    {
                        ddlMonth.Items.Add(new ListItem(month.ToString("MMMM"), month.Month.ToString()));
                    }
                }
        string defaultMonth = DateTime.Today.Month.ToString();
        ddlMonth.SelectedValue = defaultMonth;
}
}

  protected void btnSave_Click(object sender, EventArgs e)
        {
           Month = Int32.Parse(ddlMonth.SelectedValue);
}
  

Я не могу понять, в чем здесь ошибка…

Комментарии:

1. I am not able to figure out what is the mistake here. Мы также не можем без вашего asp.net код. Покажите загрузку вашей страницы, а также покажите, откуда вы получаете доступ к ddlMonth. Выбранное значение.

2. Добавлен asp.net код

3. @rkatta поделитесь своим .aspx кодом, это может помочь …!!

Ответ №1:

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

Используйте jQuery для заполнения этого поля при выборе нового месяца

 <input id="hdnSelectedMonth" type="hidden" runat="server">
  

и в вашем коде позади вы можете ссылаться на это:

 Month = Int32.Parse(hdnSelectedMonth.Value);
  

Комментарии:

1. Да, моя следующая мысль была такой. Спасибо!

2. Спасибо Рику. Я пометил это как ответ. Но я все еще ищу, может ли кто-нибудь помочь мне понять причины этого. Может быть, мне не хватает некоторых основ, и я хотел бы знать.

Ответ №2:

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

Я бы посоветовал вам использовать простой элемент управления HTML (no runat="server" ) для месяца и прочитать его на стороне сервера с чем-то вроде

 var month = Request["Month"];
  

Комментарии:

1. Спасибо! Я рассмотрю это.