выпадающие списки на главной странице, раскрывающиеся манипуляции (логика, события) на странице содержимого - PullRequest
1 голос
/ 05 августа 2010

У меня есть страница с раскрывающимися списками на панели обновлений:

             <asp:UpdatePanel ID="upVehicleFilter" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
                <ContentTemplate>

                    <asp:DropDownList id="ddlYear" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlYear_SelectedIndexChanged"></asp:DropDownList>
                    <asp:DropDownList id="ddlMake" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlMake_SelectedIndexChanged"></asp:DropDownList>
                    <asp:DropDownList id="ddlModel" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlModel_SelectedIndexChanged"></asp:DropDownList>
                    <asp:DropDownList id="ddlEngine" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlEngine_SelectedIndexChanged"></asp:DropDownList>
                    <asp:DropDownList id="ddlAspiration" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlAspiration_SelectedIndexChanged"></asp:DropDownList>
                    <asp:DropDownList id="ddlEngVin" runat="server"></asp:DropDownList>
                    <asp:ImageButton id="btnGo" runat="server" ImageUrl="/images/buttons/btn_go.gif" OnClick="btnVehicleGo_Click"></asp:ImageButton>

                </ContentTemplate>
            </asp:UpdatePanel>

логика (события) также существует на странице содержимого:

protected void ddlYear_SelectedIndexChanged(object sender, EventArgs e)...
protected void ddlMake_SelectedIndexChanged(object sender, EventArgs e)...
protected void ddlModel_SelectedIndexChanged(object sender, EventArgs e)...
protected void ddlEngine_SelectedIndexChanged(object sender, EventArgs e)...
protected void ddlAspiration_SelectedIndexChanged(object sender, EventArgs e)...
protected void btnVehicleGo_Click(object sender, ImageClickEventArgs e)...

По сути, это каскадные выпадающие списки. Если какое-либо значение было выбрано для Year, оно будет заполнено Make и т. Д.

Моя проблема сейчас заключается в том, что мне нужно переместить разметку на главную страницу и сохранить логику на странице содержимого. Как бы я смог достичь этого? Какие у меня варианты и / или альтернативы?

1 Ответ

1 голос
/ 05 августа 2010

Примерно так будет работать в коде вашей страницы контента:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    DropDownList ddlYear = ((SiteMaster)this.Master).FindControl("ddlYear") as DropDownList;
    ddlYear.SelectedIndexChanged += new EventHandler(ddlYear_SelectedIndexChanged);
}

void ddlYear_SelectedIndexChanged(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

Вам потребуется удалить атрибуты OnSelectedIndexChanged из раскрывающихся списков на главной странице.Вам также нужно будет заменить SiteMaster любым типом вашей главной страницы.

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

Обновление: если списки DropDown должны быть в главном только для целей макета, добавьтедополнительный шаблон ContentTemplate для главной страницы.Это позволит вам размещать DropDowns там, где они должны появиться, но поддерживать логику на страницах контента.Это будет чище, чем иметь половину кода в одном месте и половину в другом и полагаться на FindControl, чтобы связать их.

...