Выбор обратной передачи .NET DropDownList не будет выбирать ничего, кроме первого <option> - PullRequest
1 голос
/ 10 февраля 2010

У меня проблема с элементом управления .NET DropDownList.

ПРОБЛЕМА : Каждый раз, когда я делаю обратную передачу, по умолчанию используется тот же первый тег опции, что и выбранный. Я не могу получить его так, чтобы он указывал на фактический выбранный <option>.

По сути, вот что происходит.

1. Я делаю элемент управления DropDownList в Default.aspx

<asp:DropDownList ID="controlSelector" AutoPostBack="true" 
    OnSelectedIndexChanged="onSelectChange" runat="server" />

2. Я вытаскиваю данные из базы данных

DevHTMLGetter getControls = new DevHTMLGetter();

DataTable queryResult = new DataTable();
queryResult = getControls.getControlNames("getAdminHTML");

// binds the DataTable to the DropDownList
controlSelector.DataTextField = "controlName";
controlSelector.DataValueField = "controlID";
controlSelector.DataSource = queryResult;
controlSelector.DataBind();

Данные:

    ---------------------------
    | CONTROLID | CONTROLNAME |
    ---------------------------
    |    1      | testcontrol |
    ---------------------------
    |    2      | tstcontrol2 |
    ---------------------------

3. Я пытаюсь манипулировать данными при отправке формы:

protected void displayControlsHTML(Object sender, EventArgs
{
    String selectedItem = controlSelector.Attributes["selected2"].ToString();
    String n = controlSelector.Items.FindByText(selectedItem).ToString();

    DevHTMLGetter getControls = new DevHTMLGetter();
    Dictionary<String, String> displayItems = 
        getControls.getControlsForEdit("getSpecificControlItems", selectedItem); 
        // from Web.Config <AppSettings>

    //sets all of the boxes to their appropriate text
    txtControlName.Text = displayItems["controlName"].ToString();
    txtControlClassName.Text = displayItems["className"].ToString();
    txtLiveHTMLEditBox.Text = displayItems["controlHTML"].ToString();
    txtDisplayHTMLEditBox.Text = displayItems["displayHTML"].ToString();
}

Моя страница выглядит так:

<select class="myDropDown" id="ctl00_defaultContent_controlSelector" name="ctl00$defaultContent$controlSelector">
    <option value="1" selected="selected">Test Control</option>
    <option value="2">Test Control2</option>
</select>

ПРИМЕЧАНИЕ: onSelectChange, событие в элементе управления DropDownList ничего не делает, потому что я отправляю его с помощью кнопки SUMBMIT.

1 Ответ

4 голосов
/ 10 февраля 2010

Звучит так, как будто вы, вероятно, повторно привязываете данные к выпадающему списку обратной передачи.

Попробуйте обернуть оператор if (!PostBack) { ... } вокруг кода привязки данных:

    if (!IsPostBack)
    {
        controlSelector.DataTextField = "controlName";
        controlSelector.DataValueField = "controlID";
        controlSelector.DataSource = queryResult;
        controlSelector.DataBind();
    }
...