ИдеяВосстановление выпадающий выбранного элемента после обратной передачи
Я пытаюсь сделать очень простую вещь - обновите страницу, если выбран элемент из выпадающего списка. Выбранный элемент выпадающего списка передается в строку запроса в качестве параметра. Перезагрузка страницы. Затем параметр берется из строки запроса и используется для восстановления выбора выпадающего списка. Параметр сохраняет значение выбранного элемента.
ПРОБЛЕМА
Real выбранное значение не передается в параметр строки запроса, это всегда «0». DropDownList никогда не получает последний выбранный элемент, он всегда восстанавливает тот, который сохраняется в ViewState. ViewState не хочет запоминать новый материал, он всегда хранит одну и ту же информацию. Я пытался найти решение в течение нескольких месяцев. На некоторых страницах это работает, но в большинстве случаев это не так. Если он работал где-то в моем веб-приложении, я совершенно не знал, почему и надеялся, что он продолжит работу на следующий день. Иногда он просто переставал работать, и я не мог это исправить.
DEFAULT ASPX PAGE
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ExperimentalPage.aspx.cs"
Inherits="ExperimentalPage" Title="Enperimental Page" EnableViewState="True" %>
<asp:Content ID="ExperimentalLeftPane" ContentPlaceHolderID="cph_LeftPane" Runat="Server">
<div style="position: absolute; left: 0px; top: 35px; width: 250px;">
<asp:DropDownList ID="dd1" runat="server" OnSelectedIndexChanged="RefreshPage" AutoPostBack="True" CssClass="class_DropDown" Style="width: 250px; margin-bottom: 3px;"/>
</div>
</asp:Content>
DEFAULT ASPX.CS КОД-ЗА СТР
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
dd1.Items.Insert(0, "dd1-0");
dd1.Items[0].Value = "0";
dd1.Items.Insert(1, "dd1-1");
dd1.Items[1].Value = "1";
dd1.Items.Insert(2, "dd1-2");
dd1.Items[2].Value = "2";
}
else
{
dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByValue(Convert.ToString(Request.QueryString["dd1"])));
}
}
protected void RefreshPage(object o, EventArgs e)
{
Page.Response.Redirect("ExperimentalPage.aspx?"
+ "&dd1=" + dd1.SelectedValue);
}
ПОПЫТКИ ДЕЛАЮТ ЭТО РАБОТАЕТ
Сценарий 1. EnableViewState = "Правда"
Я выбираю третий элемент (со значением «2») выпадающего списка, перезагружает страницу. Строка запроса никогда не принимает значение «2». Он всегда «0». Первый элемент всегда выбирается после обратной передачи, возможно, из-за ViewState, который сбрасывает его.
Сценарий 2. EnableViewState = "False"
Выбранное значение не сохраняется. DropDownList полностью пуст после обратной передачи.
Сценарий 3. EnableViewState = "False". Раскрывающийся список заполняется данными о каждой загрузке страницы. Postback проверяется только для получения выбранного значения:
protected void Page_Load(object sender, EventArgs e)
{
//if (!Page.IsPostBack)
//{
dd1.Items.Insert(0, "dd1-0");
dd1.Items[0].Value = "0";
dd1.Items.Insert(1, "dd1-1");
dd1.Items[1].Value = "1";
dd1.Items.Insert(2, "dd1-2");
dd1.Items[2].Value = "2";
//}
//else
if (Page.IsPostBack)
{
dd1.SelectedIndex = dd1.Items.IndexOf(dd1.Items.FindByValue(Convert.ToString(Request.QueryString["dd1"])));
}
}
В этом случае выбранное значение не сохраняется в строку запроса и выпадающий выбранный элемент никогда не восстанавливается.
ОДИН БОЛЬШОЙ ВОПРОС
Что мне не хватает, и как сделать это сохранить выбранное значение и восстановить его после обратной передачи?
ПРОБЛЕМА ЧАСТИЧНО РЕШИЛИ
Смотрите мой ответ
когда вы называете функцию RefreshPage? –
Посмотрите на ** код ASPX PAGE **. Это метод для DropDownList. – SWA