【问题标题】:Firing an event from an ascx control in order to update some controls in the container从 ascx 控件触发事件以更新容器中的某些控件
【发布时间】: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


【解决方案1】:

也许单击按钮会导致部分回帖,而不是正常的整页回帖。如果是这种情况,整个生命周期将在服务器端(包括您的事件处理程序)运行,但当响应返回浏览器时,只有部分 HTML 将在客户端更新。 “someLabel”可能在客户端更新的区域之外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多