2013-08-04 1 views
0

PagedDataSource 및 UpdatePanel에 문제가 있습니다. 내 단추에 AsyncPostBackTrigger를 사용하면 내 페이지에서 페이징이 사라집니다.PagedDataSource 및 UpdatePanel이 함께 작동하지 않습니다.

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
      <ContentTemplate> 
       <asp:DataList ID="DataListGallery" runat="server" RepeatColumns="3" RepeatDirection="Horizontal" OnItemDataBound="DataListGallery_ItemDataBound" > 
        <ItemTemplate> 
        <asp:HiddenField ID="FieldPhoneId" Value='<%# Eval("Phone_InfoID") %>' runat="server" /> 
         <asp:ImageButton ID="btnShop" OnClick="btnShop_Click" ImageUrl="images/cart.gif" CssClass="left_bt_item" title="header=[خريد] body=[&nbsp;] fade=[on]" runat="server" /> 
         <asp:ImageButton CssClass="left_bt_item" title="header=[مورد علاقه] body=[&nbsp;] fade=[on]" OnClick="btnFavourite_Click" ID="btnFavourite" ImageUrl="images/unfav.png" runat="server" /> 
               . 
               . 
               . 

여기 C# 코드 (로드 이벤트) :

protected void Page_Load(object sender, EventArgs e) 
{ 
    //http://www.aspdotnetfaq.com/Faq/how-to-determine-whether-an-asynchronous-partial-postback-has-occurred-on-page.aspx 

    // get a reference to ScriptManager and check if we have a partial postback 

    if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack) 
    { 

     // partial (asynchronous) postback occured 

     // insert Ajax custom logic here 

    } 
    // enable property is re-creating page controls 
    else if (!Page.IsPostBack || enable) 
    { 
     //enable = false; 
     if (Page.Request["Page"] != null || Page.Request["Page"] != "") 
     { 
     . 
     . 
     . 

그리고 AsyncPostBackTrigger와 버튼 : 여기

는 ASP 코드의

: 여기

protected void btnFavourite_Click(object sender, ImageClickEventArgs e) 
{ 
    // Access to real ImageButton from repeater 
    ImageButton ib = (ImageButton)sender; 

    HiddenField hf = (HiddenField)ib.Parent.FindControl("FieldPhoneId"); 

    Favourite objFav = new Favourite(Convert.ToInt32(hf.Value)); 

    Guid userId = objFav.GetUserIdFromUserName(User.Identity.Name); 

    using (var context = new MobileGalleryEntities()) 
    { 
     try 
     { 
      // Delete favorited 
      if (objFav.HadFavorited(User.Identity.Name)) 
      { 
       int phoneInfoId = Convert.ToInt32(Convert.ToInt32(hf.Value)); 

       // Remove favourite 
       objFav.RemoveFromFavourite(userId); 

       // Change image 
       ib.ImageUrl = "~/images/unfav.png"; 
      } 
      // Add favorite 
      else 
      { 
       // Add phone 
       objFav.AddToFavourite(userId); 

       // Change image 
       ib.ImageUrl = "~/images/favs.gif"; 
      } 

     } 
     catch (Exception ex) 
     { 
     } 
    } 
} 

은 데이터 바인딩 이벤트입니다

protected void DataListGallery_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    if (User.Identity.IsAuthenticated) 
    { 
     try 
     {     
      // Get LoginView for access to ImageButton on it. 
      var loginView = e.Item.FindControl("LoginView1"); 

      ImageButton btnCom = (ImageButton)e.Item.FindControl("btnCompare"); 
      //ImageButton btnFav = (ImageButton)loginView.FindControl("btnFavourite"); 
      ImageButton btnFav = (ImageButton)e.Item.FindControl("btnFavourite"); 
      btnFav.Visible = true; 

      ImageButton btnShop = (ImageButton)e.Item.FindControl("btnShop"); 
      btnShop.Visible = true; 

      //HiddenField hf = (HiddenField)loginView.FindControl("FieldPhoneId"); 
      HiddenField hf = (HiddenField)e.Item.FindControl("FieldPhoneId"); 

      List<int> listFav = (List<int>)Session["Fav"]; 

      if (listFav.Contains(int.Parse(hf.Value))) 
       btnFav.ImageUrl = "~/images/favs.gif"; 
     } 
     catch(Exception ex) 
     { 

     } 
    } 
    else 
    { 
     ImageButton btnFav = (ImageButton)e.Item.FindControl("btnFavourite"); 
     btnFav.Visible = false; 
     ImageButton btnShop = (ImageButton)e.Item.FindControl("btnShop"); 
     btnShop.Visible = false; 

    } 
} 

btnFavourite 버튼을 누르면 내 페이지의 페이징이 사라집니다. 하지만 FullPostBack을 사용하면 작업이됩니다. FullPostBack을 사용할 때 페이징 컨트롤 및 기타 컨트롤과 같은 컨트롤을 다시 만들지 만 AsyncPostBackTrigger를 사용할 때는 컨트롤을 다시 만들지 않았습니다.

내가 뭘하고 있니? 감사합니다. .

답변

0

컨트롤을 다시 FullPostBack과 같은 방식으로 다시 만들어야합니다.