#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. Итак, в основном ответ заключается в том, что это невозможно? Странно. Тогда у меня еще одна бессонная ночь ….