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