【问题标题】:PagedDataSource and UpdatePanel don't work togetherPagedDataSource 和 UpdatePanel 不能一起工作
【发布时间】:2013-08-04 14:21:03
【问题描述】:

PagedDataSource 和 UpdatePanel 有问题。当我在按钮中使用 AsyncPostBackTrigger 时,页面中的分页消失了。

这是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 时,我没有重新创建控件。

我在做什么? 谢谢。

【问题讨论】:

    标签: asp.net updatepanel datalist


    【解决方案1】:

    我必须像 FullPostBack 一样重新创建控件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 2019-08-17
      • 2016-11-23
      • 2019-02-18
      • 2015-05-16
      • 2017-10-14
      • 2012-06-01
      相关资源
      最近更新 更多