2010-10-06 42 views
0

我正在從ascx控件觸發事件以更新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); 
} 
後面的代碼標記
+1

你說標籤中的asp.net-ajax,但名稱空間似乎是Rad Controls。這是什麼? – Hogan 2010-10-06 02:06:38

+0

這兩者 - 我正在努力解決其中的一些問題,這可能是問題的一部分。 – Matt 2010-10-06 04:35:23

回答

0

也許點擊按鈕會導致部分回貼而不是正常的整頁回傳。如果是這種情況,整個生命週期將運行在服務器端(包括您的事件處理程序),但只有部分HTML會在響應回到瀏覽器時在客戶端更新。 「someLabel」可能在客戶端更新的區域之外。

相關問題