<%@ 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”列表,我只想更新一个部分而不必进行不必要的循环。
以下是有趣的部分:如果我删除了主页,它就可以了!但是对于主页,它不是,为什么?!
答案 0 :(得分:3)
您需要使用服务器控件来启动更新,而不是普通的html输入按钮。尝试使用:
<asp:Button ID="ActivitySubmit" Text="Submit" runat="server" />
答案 1 :(得分:2)
将UpdateMode
模式属性设置为Conditional。 UpdateMode的默认值为Always
,如果UpdateMode
属性设置为Always,则UpdatePanel控件的内容会在源自页面上任意位置的每个回发时更新,reference
编辑:您正在使用输入类型=“提交”,这可能导致帖子用asp:Button替换它以使ajax调用起作用。
答案 2 :(得分:2)
这种行为的原因是你使用普通的html提交按钮而不是ASP.NET服务器按钮。因此页面提交给服务器而不涉及ASP.NET Ajax功能。用asp:Button control
替换ActivitySubmit
按钮
答案 3 :(得分:1)
我测试了相同的代码,只更改了按钮类型,并且只刷新了更新面板内容。问题是您的网站的目标是.NET 3.0,但您需要至少达到3.5。我已经在3.0上测试过,它不起作用,但在3.5和4.0上,它运行正常。因此,更容易和更安全的解决方案是以3.5为目标。但是如果你想使用.NET 3.0,我会尝试找到一种解决方法。请告诉我。
答案 4 :(得分: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>
Aspx页面:
<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及以上,这将有效。然而,在较低版本中,它不会。我担心我无法弄清楚如何在较低版本中修复它。 :(
答案 5 :(得分:0)
在Page
标记中添加
ClientIDMode="AutoID"
答案 6 :(得分:0)
我认为您可以尝试将表单放在updatepanel中,或者您可以尝试将子项更改为updatepanel的触发器属性,如下所示:
<asp:UpdatePanel runat="server" ID="UpdatePanel1" ChildrenAsTriggers="False">
然后将按钮添加为触发器,如此
ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(SubmitButton);
答案 7 :(得分:0)
尝试将此部分添加到您的UpdatePanel:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Submit" />
</Triggers>