Как мне прочитать выбранное значение выпадающего списка в исходном коде, когда опция была добавлена с использованием JavaScript?

#asp.net

#asp.net

Вопрос:

Как мне прочитать выбранное значение выпадающего списка в исходном коде, когда опция была добавлена с использованием JavaScript?

Немного больше информации: у меня есть каскадные выпадающие списки, и я хотел бы заполнить значения с помощью JavaScript, чтобы избежать обратной передачи, когда пользователь изменяет выбор в первом выпадающем списке.

Мне не разрешено использовать панель обновления.

Я создал простую демонстрационную версию, демонстрирующую проблему. Вот мой код разметки:

 <p>
    <asp:DropDownList runat="server" ID="FilterDropDownList" />
</p>
<p>
    <asp:Button runat="server" ID="SearchButton" Text="Search" 
        onclick="SearchButton_Click" /><br/>
    <asp:TextBox runat="server" ID="QueryTextBox" />
</p>
<script type="text/javascript"
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {
        var filterDropDownListId = '#<%= FilterDropDownList.ClientID %>';

        $(filterDropDownListId).append($('<option>').prop('value', 'Alpha').html('A'));
        $(filterDropDownListId).append($('<option>').prop('value', 'Beta').html('B'));
    });
</script>
  

И в коде позади у меня есть следующее:

 protected override void Render(HtmlTextWriter writer)
{
    // Register the allowed values for the down down list.
    Page.ClientScript.RegisterForEventValidation(FilterDropDownList.UniqueID, "Alpha");
    Page.ClientScript.RegisterForEventValidation(FilterDropDownList.UniqueID, "Beta");

    base.Render(writer);
}

protected void SearchButton_Click(object sender, EventArgs e)
{
    Response.Redirect(
        String.Format("{0}?dropdown={1}amp;query={2}",
            Request.Url.AbsolutePath,
            FilterDropDownList.SelectedValue,
            QueryTextBox.Text));
}
  

Проблема в том, что FilterDropDownList.Выбранное значение пустое. Я бы ожидал, что это будет либо «Альфа», либо «Бета». Я могу прочитать значение QueryTextBox.Текст без проблем.

Можно прочитать MyDropDownList.Выбранное значение, когда значения были заполнены с использованием JavaScript? Или нужно использовать другой подход?

Ответ №1:

Вы всегда можете записать выбранное значение в скрытое текстовое поле с помощью javascript и прочитать значение в коде behind.

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

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

2. Я согласен на 100%. Вот почему я добавил ваш вопрос в избранное.:) Я хочу посмотреть, возможно ли это. Если это проблема, которая останавливает вашу разработку, вы можете «обойти» проблему, реализовав мое предложение, и если в итоге вы получите удовлетворительный ответ от сообщества, вернитесь и реализуйте его.

3. Я оставлю вопрос без ответа на пару дней и надеюсь на объяснение. Если ничего не появится, я отдам вам должное за правильный ответ. 🙂

4. В итоге я создал выпадающие меню в виде элементов <select> без runat=»server» в них. Таким образом, мне не нужно использовать скрытые поля и мне не нужно регистрировать разрешенные значения для проверки. Старая школа, но работает отлично.

5. Итак, в основном ответ заключается в том, что это невозможно? Странно. Тогда у меня еще одна бессонная ночь ….