Использование списка <T>вызывает вторую загрузку страницы в ASP.Net - PullRequest
2 голосов
/ 28 апреля 2011

У меня есть довольно простое веб-приложение, которое получает список элементов из базы данных (в DataTable) и связывает представление этого DataTable с повторителем.

При преобразовании моего DataTable в список (что делается в библиотеке классов), Page Load запускается во второй раз!Проходя через отладчик, те же элементы находятся в списке, который был в DataTable.

Единственный код на моей странице был:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            rptOffers.DataSource = DataAccess.GetOfferList(offerId); // returns List<T>
            rptOffers.DataBind();
        }
    }

    public static List<OfferItem> GetOfferList(int offerId)
    {
        DataTable dtOffers = GetOfferData(offerId);
        List<OfferItem> offers = new List<OfferItem>();

        // loop throw all of the offers
        foreach (DataRow dr in dtOffers.Rows)
        {
            // add each offer to the List<>
            OfferItem currentOffer = new OfferItem();

            // initialize the OfferItem properties...

            offers.Add(currentOffer);
        }

        return offers;
    }

Когда я изменяю его на это, онработает нормально:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            rptOffers.DataSource = DataAccess.GetOfferItems(offerId);
            rptOffers.DataBind();
        }
    }

Есть ли что-то еще, что мне нужно сделать в моем списке, чтобы он не запустил загрузку страницы снова?

1 Ответ

0 голосов
/ 28 апреля 2011

У меня возникла эта проблема, когда AutoEventWireup установлен в true в моем файле .aspx

    <%@ ... AutoEventWireup="True" ...  %>

и моя функция InitializeComponent по-прежнему содержит соединение для Page_Load

    private void InitializeComponent()
    {  
        this.Load += new System.EventHandler(this.Page_Load);
    }
...