Почему мой первый выпадающий список обновляется в каскадной установке? - PullRequest
1 голос
/ 21 октября 2011

Я пытаюсь установить каскадный выпадающий список, в котором первое приведет к изменению значения второго и так далее. У меня есть такая разметка:

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

    <asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="DDL1" EventName="SelectedIndexChanged" />
            <asp:AsyncPostBackTrigger ControlID="DDL2" EventName="SelectedIndexChanged" />
        </Triggers>
        <ContentTemplate>
            <asp:DropDownList ID="DDL1" OnSelectedIndexChanged="OnDDL1Change" AutoPostBack="true" runat="server" />
            <asp:DropDownList ID="DDL2" OnSelectedIndexChanged="OnDDL2Change" AutoPostBack="true" runat="server" />
            <asp:DropDownList ID="DDL3" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>
</form>

И мой код-это что-то вроде этого:

protected void Page_Load(object sender, EventArgs e)
{
    populateDDL1();
}

private void populateDDL1()
{
    DDL1.Items.Clear();
    // -- populate from SQL
}

protected void OnDDL1Change(object sender, EventArgs e)
{
    DDL2.Items.Clear();
    // -- populate from SQL
}

Это работает за исключением того, что каждый раз, когда я нажимаю на первое раскрывающееся окно, значения во втором раскрывающемся списке заполняются, а значения в первом раскрывающемся списке обновляются, то есть похоже, что populateDDL1() вызываемый, который, конечно, не будет вызван, если не будет вызван Page_Load! Я не понимаю, почему это так. Любые предложения о том, где я иду не так?

1 Ответ

2 голосов
/ 21 октября 2011

Вы заполняете первый выпадающий список при каждой загрузке страницы.Это нужно делать только при первой загрузке.Оберните ваш populateDDL1 вызов if (!IsPostBack), что является обратным способом сказать, что он заполняется только при первой загрузке страницы.

Чтобы проверить это, установите точку останова на этой строке в Page_Load.

То, что это ajax-y UpdatePanel, не означает, что методы на стороне сервера не запускаются.

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