syncis
syncis

Reputation: 1433

updatepanel updating whole page instead of just the contenttemplate

                        <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2"  ClientIDMode="AutoID" %>
                        <asp:Content ID="Content1" ContentPlaceHolderID="head"        Runat="server">
                        </asp:Content>

                        <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="server">

                        <% 
                        foreach (var item in AllSales)
                        {
         //Here i have just set a breakpoint to see if it loops the AllSales list when I press the update button
                        }
                        %>

                        <asp:UpdatePanel runat="server" ID="UpdatePanel1">
                        <ContentTemplate>

                        <p>Update Panel: DateTime.Now: <%= DateTime.Now.ToString() %></p>
                        <asp:Button runat="server" ID="Submit" Text="Update" />

                        </ContentTemplate>

                        </asp:UpdatePanel>

                        </asp:Content> 

The script manager code is in the masterpage :

    <asp:ScriptManager ID="ScriptManager1" runat="server" />

    <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

    </asp:ContentPlaceHolder>

Problem here is that everytime i click the Update button it loads the page again and loops the "AllSales" list , i want to only update a section and not have to do unnecessary loops.

Here is the fun part : If i remove the masterpage, it works ! But with the masterpage, it dont , why?!

Upvotes: 2

Views: 3131

Answers (8)

Matus
Matus

Reputation: 437

try addind this part to your UpdatePanel:

  <Triggers>
     <asp:AsyncPostBackTrigger ControlID="Submit" />
  </Triggers>

Upvotes: 0

Axel
Axel

Reputation: 361

I think you can try and put the form inside the updatepanel, or you can try and change children as triggers property of the updatepanel like this :

<asp:UpdatePanel runat="server" ID="UpdatePanel1" ChildrenAsTriggers="False">

and then add the button as trigger like this

   ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(SubmitButton);

Upvotes: 0

vikas
vikas

Reputation: 2830

In your Page tag just add

ClientIDMode="AutoID" 

Upvotes: 0

Korijn
Korijn

Reputation: 1403

I tried to recreate your problem but it is working fine in my case. Try creating a new .aspx file and paste the following:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <p>Outside UpdatePanel</p>
        <asp:ScriptManager runat="server" ID="ScriptManager1">
        </asp:ScriptManager>
        <asp:UpdatePanel runat="server" ID="UpdatePanel1">
            <ContentTemplate>
                <p>DateTime.Now: <%= DateTime.Now.ToString() %></p>
                <asp:Button runat="server" ID="SubmitButton" Text="Go" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

This was tested in VS2010 using .NET 4.0 in an Empty Web Application. Does this work for you as well? I tried the same example using a Master page with a content placeholder. This yields the same (properly working) results. From this I gather there is something else going on on your page that we're missing. Is there?

[Edit]

I made another simple example, this time with a Master page and a Content page.

Master page:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager runat="server" ID="ScriptManager1"></asp:ScriptManager>
        <p>Master Page: DateTime.Now: <%= DateTime.Now.ToString() %></p>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"></asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

Aspx page:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:UpdatePanel runat="server" ID="UpdatePanel1">
<ContentTemplate>
<p>Update Panel: DateTime.Now: <%= DateTime.Now.ToString() %></p>
<asp:Button runat="server" ID="Submit" Text="Update" />
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>

Again this works without a problem in the same environment as the other example. It looks like you'll have to tell me about the .NET framework you're targeting and what else you've got set up in your master page and aspx page, because:

In .Net 3.5 and up this will work. In lower versions however, it won't. I'm afraid I've been unable to figure out how to fix it in lower versions though. :(

Upvotes: 0

Kokulan Eswaranathan
Kokulan Eswaranathan

Reputation: 165

I have tested the same code with only change in the button type, and it refreshes only the update panel content. The problem is your site is targeting .NET 3.0 but you need to target at least to 3.5. I have tested on 3.0, it does not work but on 3.5 and 4.0, it works fine. So the easier and safer solution is to target 3.5 onwards. But If you want to use .NET 3.0, I will try to find a workaround. Please let me know.

Upvotes: 1

Adil
Adil

Reputation: 148180

Set the UpdateMode mode property to Conditional. The default value for UpdateMode is Always, If the UpdateMode property is set to Always, the UpdatePanel control's content is updated on every postback that originates from anywhere on the page, reference

Edit: You are using input type="submit" which probably causing the post back replace it with asp:Button to get the ajax call to work.

Upvotes: 2

AGB
AGB

Reputation: 2447

You need to use a server control to initiate the update rather than a normal html input button. Try using:

<asp:Button ID="ActivitySubmit" Text="Submit" runat="server" />

Upvotes: 3

IUnknown
IUnknown

Reputation: 22478

The reason for such behavior is that you use plain html submit button instead of ASP.NET server button. Thus page submitted to server without involving ASP.NET Ajax functionality. Replace ActivitySubmit button with asp:Button control

Upvotes: 2

Related Questions