2013-08-04 51 views
0

我在PagedDataSource和UpdatePanel中遇到問題。當我在按鈕中使用AsyncPostBackTrigger時,頁面中的分頁消失。PagedDataSource和UpdatePanel不能一起工作

這裏的ASP代碼:

<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一個按鈕:

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

這裏的DataBound事件:

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相同的控件。