Asp.NET DropDownList сбрасывает SelectedIndex после PostBack - PullRequest
8 голосов
/ 14 апреля 2011

После долгих онлайн-исследований я все еще не могу решить эту проблему.У меня есть страница, которая загружает имена и количество категорий в выпадающий список.Я делаю это только если !(Page.IsPostBack).Когда AutoPostBack запускает SelectedIndex = 0.Я пробовал несколько разных вещей.Вот мой код:

PAGE

<form id="AddAssignmentForm" runat="server">
<asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server" />

<asp:UpdatePanel ID="CommentUpdate" runat="server">
<ContentTemplate>

Add Comment
<asp:DropDownList ID="ddlCategory" runat="server" Width="206" OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" AutoPostBack="true" />
<asp:TextBox ID="txtName" runat="server" Width="200" />
<asp:TextBox ID="txtAbbrv" runat="server" Width="200" />
<asp:TextBox ID="txtDescription" runat="server" Width="200" Height="90" TextMode="MultiLine" />

</ContentTemplate>
</asp:UpdatePanel>
</form>

Вот код конца.

private void Page_Load(object sender, System.EventArgs e)
{
    if (!Page.IsPostBack)
    {
        GetCategories();
    }
}

public void GetCategories()
{
    String strSql = @"SELECT Name, Total
                        FROM MyTable";

    if (con.State == ConnectionState.Closed)
        con.Open();

    OleDbCommand cmdsql = new OleDbCommand(strSql, con);
    OleDbDataReader cmdReader = cmdsql.ExecuteReader();

    if (cmdReader.HasRows)
    {
        while (cmdReader.Read())
        {
            ddlCategory.Items.Add(new ListItem(cmdReader["Category_Name"].ToString(), cmdReader["Total"].ToString()));

        }
        ddlCategory.SelectedIndex = -1;
    }


    cmdReader.Close();
    con.Close();
}

public void FillForm(int index)
{
    ListItem item = ddlCategory.Items[index];
    txtName.Text = item.Text + " " + (Convert.ToInt32(item.Value) + 1).ToString();
    txtAbbrv.Text = item.Text.Substring(0, 1) + (Convert.ToInt32(item.Value) + 1).ToString();
}

public void ddlCategory_SelectedIndexChanged(Object sender, EventArgs e)
{
    //When I break here SelectedIndex always = 1.
    FillForm(ddlCategory.SelectedIndex);
}

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

Ответы [ 8 ]

11 голосов
/ 11 декабря 2012

Добавить AppendDataBoundItems = "true" для раскрывающегося списка

4 голосов
/ 15 февраля 2013

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

3 голосов
/ 15 апреля 2011

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

1 голос
/ 13 ноября 2017

Вы должны загрузить список в DropDownList, если не IsPostBack

Пример кода:

if (!IsPostBack)
{
   //fill here
}
1 голос
/ 04 февраля 2017

Я тоже боролся с этим, я пытался EnableViewState="true" ViewStateMode="Enabled", но на самом деле это не нужно, вам просто нужно добавить IsPostBack в событие Page_Load. Не забудьте добавить IsPostBack, вот и все ...

if (!IsPostBack)
{
    LoadDropDown();
}
1 голос
/ 18 июля 2014

Это случилось со мной при попытке использовать комбинированное значение столбца для DataValueField. Например:

Хранимая процедура была написана так:

SELECT
    Description,
    Value1 + ',' + Value2 AS Value
FROM
    DropDownListTable

И DataValueField использовал поле Value, которое представляло собой комбинацию полей Value1 и Value2, разделенных запятой. (Я также пробовал трубу и без разделителя, но у меня были те же результаты)

 With ddl
     .DataTextField = "Description"
     .DataValueField = "Value"
     .DataSource = ds
     .DataBind() 
 End With

Как только я использовал Value1 или Value2 в качестве DataValueField, проблема исчезла.

1 голос
/ 14 апреля 2011

Viewstate включен или отключен? SelectedIndex основан на нуле, поэтому он был сброшен, я думаю, он будет установлен в ноль.

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

Попробуйте другой браузер. У меня была проблема с каскадными выпадающими меню, когда в Firefox он не срабатывал / вел себя некорректно.

0 голосов
/ 14 февраля 2013

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

Надеюсь, это поможет кому-то ....:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...