ASP.NET C # Ошибка: событие объекта не определено - PullRequest
0 голосов
/ 05 декабря 2009

Я получаю неопределенное событие EVENT в коде ASP.NET C # ниже. Я динамически создаю кнопки изображений и явно назначаю их для события CLICK. После того, как пользователь нажимает на миниатюру, пользователь перенаправляется на страницу с развернутым изображением этой миниатюры. Когда пользователь нажимает кнопку «Назад», чтобы перейти на исходную страницу, все становится интереснее. Если пользователь снова пытается щелкнуть по миниатюре, браузер не может повторно настроить событие нажатия кнопки изображения с ошибкой «СОБЫТИЕ не определено». Эта ошибка является случайной, она всегда возникает после минимум одного «обратного вызова», но последовательность когда это происходит, не согласовано. Интересно, что это только в IE. Google Chrome и Firefox работают нормально и распознают СОБЫТИЕ. Я обыграл свойство ViewState, но это не сработало. Любые идеи?

protected void ImageButton_Click(object sender, ImageClickEventArgs e)
        {
            ImageButton ib = (ImageButton)sender;
            Server.Transfer(@"FullImage.aspx?file=" +
                            HttpUtility.UrlEncode("~/Gallery/Pictures/RegSize/pic" +
                                                  ib.CommandArgument + ".jpg"));
        }

    protected void Page_Load(object sender, EventArgs e)
    {

        //Array containing file locations of thumbnail pictures

        string[] files = null;

        files = Directory.GetFiles(Server.MapPath("~/Gallery/Pictures/RegSize"), "*.jpg");



        for (int i = 0; i < files.Length; i++)
        {
            System.Web.UI.WebControls.Image imgWeb = new System.Web.UI.WebControls.Image();

            //Create bitmap to retrieve Image's size information
            Bitmap bmp = new Bitmap(Server.MapPath("~/Gallery/Pictures/RegSize/Pic"
                        + i.ToString() + ".jpg"));

            //Create dynamic ImageButton to hold the Image
            System.Web.UI.WebControls.ImageButton imgBtn =
                new System.Web.UI.WebControls.ImageButton();
            imgBtn.Click += new ImageClickEventHandler(ImageButton_Click);
            imgBtn.Attributes.Add("OnClick", "ImageButton_Click");
            //imgBtn.EnableViewState = false;
            imgBtn.ImageUrl = "~/Gallery/Pictures/RegSize/pic" + i.ToString() + ".jpg";
            imgBtn.CommandArgument = i.ToString();
            //Set Imagebutton Width/Height according to the Bitmaps Width/Height
            imgBtn.Width = Resize(bmp.Size, 200, 200, "WIDTH");
            imgBtn.Height = Resize(bmp.Size, 200, 200, "HEIGHT");

            imgBtn.Style.Add(HtmlTextWriterStyle.BackgroundColor, "white");
            imgBtn.Style.Add(HtmlTextWriterStyle.Margin, "5px");

            //Dispose Bitmap, no need for it
            bmp.Dispose();

            //imgBtn.ImageUrl = @"thumbnail.aspx?file=\gallery\pictures\regsize\pic" + i.ToString() + ".jpg";
            //imgBtn.PostBackUrl = @"FullImage.aspx?file=" + HttpUtility.UrlEncode("~/Gallery/Pictures/RegSize/pic" + i.ToString() + ".jpg");

            divDisplay.Controls.Add(imgBtn);
        }

1 Ответ

2 голосов
/ 05 декабря 2009

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

Вместо этого вы должны выполнить эту работу в обработчике события Page_Init ().

В случае, если это не исправляет: у вас настроено кэширование вывода или кэширование на стороне клиента для этой страницы? Когда вы возвращаетесь в браузер, страница повторно запрашивается с сервера? Вы смотрели HTTP-разговор с Fiddler?

Кроме того, незначительный момент: лучше использовать «использование» для вашего растрового изображения, чем явно вызывать Dispose ().

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