Quantcast
Viewing all articles
Browse latest Browse all 5678

AsyncPostback Trigger within ListView Control - CheckBox (causing full postpack)

I have searched everywhere and can't find a solution to this.  I'm using Visual Studio 2012 (ASP.NET 4.5 Framework). I have a ListView control with an LayoutTemplate in which has a CheckBox control (this is repeated for each databound row).  I have an updatepanel outside the listview which has a label I was to update when the user checks/uncheckes any of the checkboxes in the listview control.  This is working, however no matter what I do, it does a full postback.

To reproduce. In VS2012 start a New ASP.NET Web Forms Application.   This has a Site.Master MasterPage and a few pages for a new asp.net project.  Edit the About.aspx and replace with the following page and code below.   What I have done in this example is made a Text Box control and button that shows that the partial postback is working.   I update the Label2 (which is not in an updatepanel) on post back.  If the trigger is working in the listview, label2's should not update until a full postback.

I have tried the following (as one suggestion) on the updatepanel label, and also on the page as whole (which doesn't seem to make a difference).:  

ClientIDMode="AutoID"

Here is the code to reproduce the problem.  

.aspx

<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><asp:ListView ID="ListViewProducts" runat="server" ItemPlaceholderID="ProductItem" OnItemDataBound="ListViewProducts_ItemDataBound" ><ItemTemplate><div class="Product"><asp:CheckBox ID="CheckBox1" runat="server" OnCheckedChanged="CheckBox1_CheckedChanged" AutoPostBack="true" ClientIDMode="AutoID" /><strong><asp:Label runat="server" ID="LabelId" Text='<%# Eval("Id") %>'></asp:Label>
                    ::<asp:Label runat="server" ID="LabelName" Text='<%# Eval("Name") %>'></asp:Label></strong><br /><em><asp:Label runat="server" ID="LabelDescription" Text='<%# Eval("Description") %>'></asp:Label></em></div></ItemTemplate><LayoutTemplate><asp:PlaceHolder runat="server" ID="ProductItem"></asp:PlaceHolder></LayoutTemplate><ItemSeparatorTemplate><hr /></ItemSeparatorTemplate></asp:ListView><asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"><ContentTemplate>
            Update Panel:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></ContentTemplate><Triggers><asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /></Triggers></asp:UpdatePanel>

code behind

 public class Product
    {
        private int? _Id;
        private string _Name;
        private string _Descrition;

        public Product() { }

        public Product(int Id, string Name, string Description)
        {
            this._Id = Id;
            this._Name = Name;
            this._Descrition = Description;
        }

        /// <span class="code-SummaryComment"><summary></span>
        /// Product Id
        /// <span class="code-SummaryComment"></summary></span>
        public int? Id
        {
            get { return _Id; }
            set { _Id = value; }
        }

        /// <span class="code-SummaryComment"><summary></span>
        /// Product Name
        /// <span class="code-SummaryComment"></summary></span>
        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }

        /// <span class="code-SummaryComment"><summary></span>
        /// Product Complete Description
        /// <span class="code-SummaryComment"></summary></span>
        public string Description
        {
            get { return _Descrition; }
            set { _Descrition = value; }
        }
    }

    public class ProductList
    {
        private IList<Product> _ProductDB = new List<Product>();

        public ProductList()
        {
            this._ProductDB.Add(new Product(1, "Computer", "Complete hardware with software included."));
            this._ProductDB.Add(new Product(2, "Kitchen Calendar", "Beautiful caledar for your kitchen."));
            this._ProductDB.Add(new Product(3, "Shoes", "Most advanced anti-impact system in a small shoe."));
            this._ProductDB.Add(new Product(4, "Pen", "What you think, must be written. This pen is your helper."));
            this._ProductDB.Add(new Product(5, "Cell Phone", "Powerfull comunication thing. Today is part of your body. Get one more."));
        }

        public IList<Product> GellAll()
        {
            return this._ProductDB;
        }
    } 

    public partial class About : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ProductList db = new ProductList();
                this.ListViewProducts.DataSource = db.GellAll();
                this.ListViewProducts.DataBind();
            }

            Label2.Text = DateTime.Now.Ticks.ToString();
        }


        protected void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = TextBox1.Text;
        }

        protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.Ticks.ToString();
            UpdatePanel1.Update();
        }



        protected void ListViewProducts_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            CheckBox cb = e.Item.FindControl("CheckBox1") as CheckBox;
            ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(cb);   
        }

    }




Viewing all articles
Browse latest Browse all 5678

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>