【发布时间】:2010-10-06 01:53:14
【问题描述】:
我正在从 ascx 控件触发一个事件,以更新 ascx 控件所属容器中的某些控件。
ascx 控件通过模态弹出扩展器显示。当我单击 ascx 内的按钮时,我会触发包含 ascx 控件的容器订阅的事件。
事件委托被触发并且预期的逻辑在容器的代码中运行,问题是尽管事件逻辑已被处理,但对容器内部的控件所做的任何更改都不会更新。呈现回发结果时,预期的更改不会反映在页面上。
有什么我应该知道的陷阱吗?
容器的标记
<asp:Panel ID="panelTreeViewAttributesTitle" runat="server">
<asp:Label ID="someLabel" runat="server" Text="Hello Governor" />
<asp:LinkButton ID="LinkButtonEdit" runat="server" Text="(Edit)" />
<ajax:ModalPopupExtender BackgroundCssClass="modalBackground" Enabled="True"
ID="btnEdit_ModalPopupExtender" PopupControlID="modalPanel" runat="server"
TargetControlID="LinkButtonEdit" />
</asp:Panel>
<asp:Panel ID="modalPanel" runat="server" CssClass="modalPopUp" Style="display: none">
<xxx:customControl runat="server" ID="myCustomControl" />
</asp:Panel>
容器背后的代码
protected void Page_Load(object sender, EventArgs e)
{
myCustomControl.Updated += eventCaptured;
if (IsPostBack) return;
...
}
void eventCaptured(object sender, EventArgs e)
{
someLabel.Text = "Goodbye Governor";
}
自定义控件
<script type="text/javascript">
function Update() {
var ajaxManager = $find("<%= RadAjaxManager.GetCurrent(Page).ClientID %>");
if (ajaxManager != null)
ajaxManager.ajaxRequest("");
}
</script>
<asp:Panel ID="panelEditPanel" runat="server">
<asp:Label ID="lblCMA" runat="server" Text="Call me Arnooold." />
</asp:Panel>
<asp:Button ID="btnUpdate" runat="server" Text="Update" OnClientClick="Update()" />
<asp:Button ID="btnCancel" runat="server" Text="Cancel" />
自定义控件的代码
public event EventHandler Updated;
protected void AjaxManager_AjaxRequest(object sender, AjaxRequestEventArgs e)
{
//Some DB backend logic
UpdateFinished();
}
private void UpdateFinished()
{
if (Updated == null) return;
Updated(this, null);
}
【问题讨论】:
-
您在标签中说 asp.net-ajax,但命名空间似乎是 Rad Controls。是哪个?
-
两者兼有——我正在努力解决其中的一些问题,这可能是问题的一部分。
标签: c# events asp.net-ajax page-lifecycle