2
                        <%@ 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> 

脚本管理器代码位于母版页中:

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

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

    </asp:ContentPlaceHolder>

这里的问题是,每次我单击更新按钮时,它都会再次加载页面并循环“AllSales”列表,我只想更新一个部分而不必进行不必要的循环。

这是有趣的部分:如果我删除母版页,它会起作用!但是使用母版页,它没有,为什么?!

4

8 回答 8

3

您需要使用服务器控件来启动更新,而不是使用普通的 html 输入按钮。尝试使用:

<asp:Button ID="ActivitySubmit" Text="Submit" runat="server" />
于 2013-02-14T09:30:52.760 回答
2

UpdateModemode 属性设置为 Conditional。UpdateMode 的默认值为Always,如果该UpdateMode属性设置为 Always,则 UpdatePanel 控件的内容会在来自页面任何位置的每次回发时更新,请参考

编辑:您正在使用 input type="submit" 这可能导致 post back 将其替换为 asp:Button 以使 ajax 调用正常工作。

于 2013-02-14T09:28:11.557 回答
2

这种行为的原因是您使用纯 html 提交按钮而不是 ASP.NET 服务器按钮。因此页面提交到服务器而不涉及 ASP.NET Ajax 功能。用asp替换ActivitySubmit按钮:按钮控件

于 2013-02-14T09:29:21.967 回答
1

我已经测试了相同的代码,只改变了按钮类型,它只刷新了更新面板的内容。问题是您的网站面向 .NET 3.0,但您至少需要面向 3.5。我在 3.0 上测试过,它不起作用,但在 3.5 和 4.0 上,它工作正常。因此,更简单、更安全的解决方案是针对 3.5 及更高版本。但是如果你想使用 .NET 3.0,我会尝试找到一个解决方法。请告诉我。

于 2013-02-27T15:45:21.130 回答
0

我试图重现您的问题,但在我的情况下它工作正常。尝试创建一个新的 .aspx 文件并粘贴以下内容:

<!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>

这是在 VS2010 中使用 .NET 4.0 在空 Web 应用程序中测试的。这对你也有用吗?我使用带有内容占位符的母版页尝试了相同的示例。这会产生相同(正常工作)的结果。据此,我收集到您的页面上还有其他我们遗漏的内容。有没有?

[编辑]

我做了另一个简单的例子,这次是一个母版页和一个内容页。

母版页:

<!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>

页面:

<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>

再次,这在与另一个示例相同的环境中没有问题。看起来您必须告诉我您所针对的 .NET 框架以及您在母版页和 aspx 页面中设置的其他内容,因为:

在 .Net 3.5 及更高版本中,这将起作用。然而,在较低版本中,它不会。恐怕我一直无法弄清楚如何在较低版本中修复它。:(

于 2013-02-27T15:31:52.177 回答
0

在您的Page标签中添加

ClientIDMode="AutoID" 
于 2013-02-28T11:58:03.020 回答
0

我认为您可以尝试将表单放入更新面板中,或者您可以尝试将子项更改为更新面板的触发器属性,如下所示:

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

然后像这样添加按钮作为触发器

   ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(SubmitButton);
于 2013-03-01T17:21:28.813 回答
0

尝试将此部分添加到您的更新面板:

  <Triggers>
     <asp:AsyncPostBackTrigger ControlID="Submit" />
  </Triggers>
于 2013-03-02T20:31:39.737 回答