2009-12-05 6 views
0

아래의 ASP.NET C# 코드에서 EVARY undefined rror가 발생합니다. 동적으로 이미지 버튼을 만들고 CLICK 이벤트에 명시 적으로 할당하고 있습니다. 사용자가 미리보기 이미지를 클릭하면 사용자는 해당 미리보기 이미지가 날린 이미지가있는 페이지로 이동합니다. 사용자가 뒤로 버튼을 눌러 원래 페이지로 이동하면 흥미로운 부분이 생깁니다. 사용자가 미리보기 이미지를 다시 클릭하려고하면 "EVENT가 정의되지 않았습니다."오류가있는 이미지 버튼 클릭 이벤트를 브라우저가 확인하지 못합니다.이 오류는 임의적이며 항상 최소 하나의 "포스트 백"후에 발생하지만 시퀀스는 구글 크롬과 파이어 폭스가 잘 작동하고 이벤트를 인식 할 수있다. 나는 ViewState 속성을 가지고 놀았지만 효과가 없다. 어떤 아이디어?ASP.NET C# 오류 : 개체 이벤트가 정의되지 않았습니다.

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); 
     } 

답변

2

여기에 여러 가지 일이있을 수 있지만 내가 처음 보는 것은 새로운 컨트롤을 만들어서 Page_Load()에서 페이지에 추가해서는 안된다는 것입니다. 그 시점에서 포스트 백에서 ViewState는 컨트롤의 상태를 다시 설정하는 데 이미 사용되었습니다.

대신, Page_Init() 이벤트 핸들러에서 해당 작업을 수행해야합니다.

문제가 해결되지 않는 경우 :이 페이지에 대해 출력 캐싱 또는 클라이언트 쪽 캐싱을 구성 했습니까? 브라우저에서 다시 작업 할 때 페이지가 서버에서 다시 요청됩니까? 피들러와 HTTP 대화를 봤어?

작은 점 : Bitmap에 Dispose()를 명시 적으로 사용하는 것보다 "사용하는"것이 더 좋습니다.

+0

나는 바이올린을 사용한 적이 없거나 들어 본 적이 없으므로 캐시 된 설정을 다운로드하고 확인했습니다. 그 위대한 도구 인 고마워요! 어쨌든, 웹 양식은 개인적으로 캐시되고 있으므로 다음 코드를 Page_Load() 이벤트에 추가했습니다. Response.Cache.SetCacheability (HttpCacheability.NoCache); 문제가 해결되었지만 웹 양식을 캐싱하면 "이벤트가 확인되지 않았습니다"가 발생합니다. 나는 내 그림과 CSS 파일이 여전히 캐시되고 있다고 생각한다. 웹 세션의 "캐시"열 아래에있는 피 들러에서 "no-cache"값과 반대되는 필드가 그림 및 CSS 파일에 대해 비어 있기 때문에이 말을합니다. – contactmatt

+0

그것은 국가 관리와 관련이있는 것 같습니다. 나는이 문제가 ViewState와 관련이있을 수 있으며 컨트롤이 존재하기 전에 발생하는 컨트롤 초기화를 의심합니다. Page_Init 중에 이벤트 설정이 발생하면 해당 컨트롤이없고 이벤트 처리기가 할당되지 않아 이벤트가 정의되지 않은 오류가 발생합니다. 재 : 피들러; 예, 훌륭한 도구입니다. (작성자가 한 번에 여기에 게시합니다.) "원시"모드를 사용하여 정확한 HTTP 헤더를 볼 수 있습니다. – RickNZ

관련 문제