Menu

仍然无法使UpdatePanel控件正常运行

Hversemann

会员
已加入
2016年7月29日
留言内容
11
地点
中西部
编程经验
3-5
在网络应用中。我正在开发,我有几个内容页面,其中只有一个页面正在使用UpdatePanel控件。我的ScriptManager控件位于应用程序的主页上。但经过一番阅读,我不确定它在正确的位置。我将其放置在主页上BODY标签下面的FORM标签中,而不是当前放在主页上两个内容所有者控件中的任何一个中,但是我还没有使它工作一次。因此,这是从母版页到内容页的所有内容:

1.)MasterPage代码:
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID ="ScriptManager1" runat="server"EnablePartialRendering ="true"SupportsPartialRendering ="true" >

2.)当前内容页面标记代码:

<asp:Button ID="UpdatePanelButton" runat="server" Text="Update Panel" Visible="false" OnClick="UpdatePanelButton_Click" />
<asp:UpdatePanel ID="PullRubricPageUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
<ContentTemplate>
<br />
<asp:Label ID="UpdatePanelLabel" runat="server" Text="" Font-Bold="true" ForeColor="#ff0066"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID ="UpdatePanelButton" EventName="Click" ></ asp:AsyncPostBackTrigger>
</Triggers>
</asp:UpdatePanel>

3.)在我的实际代码隐藏方法中,使用以下代码调用DisplayUpdatePanelLabelMessage(string msg,string caller):

如果((msg!= null)&& (msg != "") && (msg != " "))
{
updtMessage = msg;
UpdatePanelButton_Click(new object(),new EventArgs());
}



4)然后,最后调用UpdatePanelButton_Click方法,其代码如下所示:

标签UpdatePanelLabel =(Label)PullRubricPageUpdatePanel.FindControl("UpdatePanelLabel");
UpdatePanelLabel.Text = updtMessage;


因此,我通常希望标签在逻辑的几个不同部分之间异步且频繁地更新,但它似乎只是同步更新,因此我在整个UpdatePanel流程的设置中缺少某些地方。但是呢

实际上,我已经在DisplayUpdatePanelLabelMessage方法和UpdatePanelButton_Click方法中的代码中都添加了断点,并且消息都发送给了它们,但是UpdatePanel内的页面上没有异步发生任何事情。

因此,对解决我的问题的任何帮助将不胜感激。

谢谢您的帮助。

亨利
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
我已经很长时间没有使用Web窗体了,那时我也没有使用它,而且我从未使用过UpdatePanel。也就是说,您的代码对我而言并不正确。在后面的代码中,您指定UpdatePanel在单击UpdatePanelButton时发布。您似乎在印象中,直接调用处理该事件的方法应该导致回发。它不应该。调用事件处理方法并不意味着它处理的事件已引发。您必须实际单击“按钮”才能实现。您大概可以在脚本中执行此操作,但不能在代码隐藏中执行此操作。我无法告诉您要实现目标需要做什么,但是我可以告诉您您在那儿树错了树。您需要了解事件和事件处理程序之间的区别。
 

Hversemann

会员
已加入
2016年7月29日
留言内容
11
地点
中西部
编程经验
3-5
我明白您的意思,自从我在下面发表第一篇文章以来,我对代码进行了一些更改。
现在,在更新面板中,我正在使用一个文本框控件,该控件应该触发"TextChanged" event which "[字体=&quot]Occurs when the content of the text box changes between posts to the 服务器.[/FONT]"引用我发现的一些文档。因此,由于文本框位于更新面板内部,因此默认情况下应使该面板更新。现在,在此问题页面的其余代码中的多个位置,我正在调用一种方法,该方法的消息将显示在更新面板的标签中。在这种方法中,我在更新面板的文本框的.Text属性中设置了新的文本值。所以当我这样做时,"TextChanged"事件触发并调用其相关事件处理程序?如果是这样,那么其他事情一定是错误的,除非我有一个或多个我在这里做出错误的假设。我什至尝试在页面的Page_Load事件处理程序的顶部尝试通过我的母版页中的脚本管理器在更新面板中注册文本框控件,如下所示:

ScriptManager 脚本管理器1 = (ScriptManager)Page.Master.FindControl("ScriptManager1");
脚本管理器1.RegisterAsyncPostBackControl(PullRubricHiddenTextBox);

而且我的更新面板似乎仍未发生任何更新。

那么,我上面的任何假设在事情应该如何运作方面都是错误的吗?

如果是这样,请纠正我。这是我第一次真正尝试在任何页面上使用更新面板。

谢谢您的帮助。

亨利
 
最佳 底部