Без изменений для индекса DropDownList в пользовательском элементе управления! - PullRequest
0 голосов
/ 16 июня 2010

Я создал пользовательский элемент управления, представляющий собой DropDownList с указанными элементами. Я разработал AutoPostback и SelectedCategoryId в качестве свойств и SelectedIndexChanged в качестве события для своего пользовательского элемента управления.
Вот мой файл ASCX за кодом:

private int _selectedCategoryId;

private bool _autoPostback = false;

public event EventHandler SelectedIndexChanged;

public void BindData()
{
    //Some Code...
}

protected void Page_Load(object sender, EventArgs e)
{
    BindData();
    DropDownList1.AutoPostBack = this._autoPostback;
}

public int SelectedCategoryId
{
    get
    {
        return int.Parse(this.DropDownList1.SelectedItem.Value);
    }
    set
    {
        this._selectedCategoryId = value;
    }
}

public string AutoPostback
{
    get
    {
        return this.DropDownList1.AutoPostBack.ToString();
    }
    set
    {
        this._autoPostback = Convert.ToBoolean(value);
    }
}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (SelectedIndexChanged != null)
        SelectedIndexChanged(this, EventArgs.Empty);
}

Я хочу, чтобы использованная панель обновления обновляла поля текстового поля в соответствии с выбранным индексом dorp down.
это мой код на странице ASPX:

<asp:Panel ID="PanelCategory" runat="server">
    <p>
        Select Product Category:&nbsp;
        <myCtrl:CategoryDDL ID="CategoryDDL1" AutoPostback="true" OnSelectedIndexChanged="CategoryIndexChanged"
            SelectedCategoryId="0" runat="server" />
    </p>
    <hr />
</asp:Panel>
<asp:UpdatePanel ID="UpdatePanelEdit" runat="server">
    <ContentTemplate>
        <%--Some TextBoxes and Other Controls--%>
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="CategoryDDL1" />
    </Triggers>
</asp:UpdatePanel>

Но всегда Выбранный индекс CategoryDDL1 равен 0 (как по умолчанию). это означает, что только нулевое значение будет передано событию для обновления текстовых полей данных. что не так с моим кодом? почему выбранный индекс не меняется? Помощь

1 Ответ

1 голос
/ 16 июня 2010

Если ваш BindData() метод полностью автономен, переместите его из Page_Load в:

protected override void OnInit(EventArgs e)
{
   BindData();
}

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

Если, однако, вашему методу BindData() требуется информация с родительской страницы, измените загрузку страницы на:

protected void Page_Load(object sender, EventArgs e)
{
    if(!this.Page.IsPostback) {
       BindData();
    }
    DropDownList1.AutoPostBack = this._autoPostback;
}

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

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

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