我有一個列表框和一個用戶控件放置一個更新面板內這樣的頁面:刷新UpdatePanel的一個modalpopup內的用戶控件內按鈕的點擊事件發生後
<%@ Register TagPrefix="uc1" TagName="CMessage" Src="~/Controls/CMessage.ascx" %>
<ajaxToolkit:ToolkitScriptManager runat="server" ID="ToolkitScriptManager1" EnableScriptGlobalization="true" EnableScriptLocalization="true" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ListBox ID="lbox" runat="server"></asp:ListBox>
<asp:Button ID="btnDelete" OnClick="btnDelete_Click" runat="server" Text="Delete selected item" Enabled="True"></asp:Button>
<uc1:CMessage ID="CMessage1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
的頁面代碼隱藏是這樣的:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
lbox.Items.Add("test1");
lbox.Items.Add("test2");
}
}
protected void btnDelete_Click(object sender, EventArgs e)
{
CMessage.MessageConfirm("Delete item?", "Yes", "No", DeleteItem);
}
protected void DeleteItem()
{
lbox.Items.Remove(lbox.SelectedItem);
CMessage.Message("Item deleted succesfully!");
}
用戶控制是這樣的:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="CMessage.ascx.cs" Inherits="Controles.CMessage" %>
<table id="tableMessage" runat="server" style="display: none" class="modalPopup">
<tr>
<td>
<asp:Label ID="lb5" runat="server" Text="Message"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:Label ID="lbMessage" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:Button ID="btnOk" runat="server" Text="Ok" OnClick="btnOk_Click" />
<asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClick="btnCancel_Click" />
</td>
</tr>
</table>
<asp:Button ID="btnOKError" runat="server" Text="OK" style="display: none" />
<ajaxToolkit:ModalPopupExtender ID="ModalPopupMessage" runat="server" TargetControlID="btnOKError" PopupControlID="tableMessage" OkControlID="btnOKError" CancelControlID="btnOKError"></ajaxToolkit:ModalPopupExtender>
用戶控件codebehi第二是這樣的:
public partial class CMensaje : UserControl
{
public delegate void FunctionButtonPressed();
private FunctionButtonPressed FunctionButtonPressedOk
{
get { return (FunctionButtonPressed)Session["FunctionButtonPressedOk"]; }
set { Session["FunctionButtonPressedOk"]= value; }
}
protected void btnOk_Click(object sender, EventArgs e)
{
ModalPopupMenssage.Hide();
if (FunctionButtonPressedOk!= null)
{
FunctionButtonPressedOk();
}
}
protected void btnCancel_Click(object sender, EventArgs e)
{
ModalPopupMessage.Hide();
}
public void Mensaje(string message)
{
lbMessage.Text = message;
FunctionButtonPressedOk= null;
btnCancel.Visible = false;
ModalPopupMessage.Show();
}
public void MessageConfirm(string message, FunctionButtonPressed FunButtonOkx)
{
lbMessage.Text = message;
FunctionButtonPressedOk= FunBotonAceptarx;
btnCancel.Visible = true;
ModalPopupMensaje.Show();
}
}
一切正常,彈出所示,從頁面調用函數傳遞給用戶控件,如果用戶按下OK,正確觸發等觸發它,但在最後的函數DeleteItem()對頁面所做的更改(在本例中,從列表框中刪除的項目和啓動的通知消息)不起作用。
它就像updatepanel不刷新。我不能手動調用UpdatePanel1.Update(),因爲我一直有updatemode。理論上在頁面的這一部分,它應該刷新頁面的變化...
我試圖添加用戶控件頁面加載OK按鈕作爲UpdatePanel的PostBackTrigger沒有用和作爲AsyncPostBackTrigger。
請記住,這是頁面的削減版本,並且用戶控制,使人們可以專注於手頭的問題,所以如果你需要任何更多的細節問我...
的代碼流像這樣:
用戶點擊刪除項目按鈕,並在頁面(第一回發)觸發 btnDelete_Click()
btnDelete_Click()調用的用戶控件的CMessage。MessageConfirm傳遞DeleteItem作爲 參數
在用戶控件MessageConfirm()表示modalpopup並且爲了節省 參數函數DeleteItem()以後稱之爲( 第一個回發的端)
顯示後modalpopup用戶單擊OK按鈕 觸發btnOk_Click()在該用戶控件(第二回發)
在用戶控件btnOk_Click()調用DeleteItem()函數 所保存上10狡猾
在頁面DeleteItem()從列表框刪除項目(可以說 我不調用所述第二消息,以簡化,這將是 端部的第二回發,和更新面板處理不當刷新:S )
我想我已經分離出的問題,感動了所有的控制和功能從用戶控件的頁面,問題依然存在,但如果我叫DeleteItem()函數,而不是直接他代表的,它的工作(請記住,在這兩種情況下,DeleteItem()處的斷點均已觸發,以便功能代碼正確執行):
protected void btnOk_Click(object sender, EventArgs e)
{
ModalPopupMenssage.Hide();
/*if (FunctionButtonPressedOk!= null)
{
FunctionButtonPressedOk();
}*/
DeleteItem(); //page updates correctly! why?
}
與代表是否存在一些不兼容?