Заполните asp: выпадающий список - VS 2008 - PullRequest
1 голос
/ 18 ноября 2008

У меня есть форма с 2 DDL с именем

Штат и город

Состояние:

<asp:UpdatePanel ID="States" runat="server" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="States"EventName="SelectedIndexChanged" />
        </Triggers>
        <ContentTemplate>
            <asp:DropDownList ID="States" runat="server"
            AutoPostBack="True" DataSourceID="StatesObjectDataSource" 
            AppendDataBoundItems="true" 
                onselectedindexchanged="States_SelectedIndexChanged">
            <asp:ListItem Value="-1" Text="- None -"/>    
            </asp:DropDownList>
            <asp:ObjectDataSource ID="StatesObjectDataSource" runat="server" 
                onselecting="StatesObjectDataSource_Selecting" 
                SelectMethod="GetStates" 
                TypeName="Something">
            </asp:ObjectDataSource>
        </ContentTemplate>
    </asp:UpdatePanel>

Город:

<asp:DropDownList ID="Cities" runat="server">
        </asp:DropDownList>

Когда они выбирают штат, я хочу заполнить DDL городов всеми городами для этого штата.

В коде позади я могу добраться до

States_SelectedIndexChanged(object sender, EventArgs e)

и я пытаюсь заполнить DDL городов этим

Cities.Items.Add(new ListItem(city,city));

Тем не менее, я не вижу, что мои города заполнены DDL

Ответы [ 3 ]

2 голосов
/ 19 ноября 2008

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

Страница позади

<asp:DropDownList runat="server" ID="ddlCity" DataValueField="Key" DataTextField="Value">
</asp:DropDownList>

Код позади

private List<KeyValuePair<string, string>> ListData
{
    get { return (List<KeyValuePair<string, string>>) (ViewState["ListData"] ??     
                 (ViewState["ListData"] = new List<KeyValuePair<string, string>>())); }
    set { ViewState["ListData"] = value; }
}

protected void States_SelectedIndexChanged_SelectedIndexChanged(object sender, EventArgs e)
{
  ListData.Add(new KeyValuePair<string, string>(ddlCitys.SelectedValue, ddlCitys.SelectedValue));
  ddlCitys.DataSource = ListData;
  ddlCitys.DataBind();
}

Оператор get также использует ленивую загрузку для свойства ListData, поэтому при доступе к списку вы никогда не встретите исключение пустой ссылки.

1 голос
/ 19 ноября 2008

Поместите свой город DropDownList в панель обновлений.

1 голос
/ 19 ноября 2008

Если это вообще возможно, я бы предложил использовать CascadingDropDown Extender вместо UpdatePanel. Нет смысла изобретать это колесо, и элемент управления Toolkit использует веб-службы вместо частичных обратных передач (намного быстрее).

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