我正在Web用户控件中创建一个ModalPopupExtender。 当我单击面板中的OK按钮(显示为模型弹出窗口)时,按钮的事件Handeler不会执行。 当我不使用Web用户控件时,不会发生此问题。 这是用户控件(.ascx)文件代码。
<script type="text/javascript" language="javascript">
function OkClicked(sender, e) {
__doPostBack('Button1', e);
}
</script>
<asp:Button ID="Button2" runat="server" Text="Show" />
<asp:Panel ID="Panel1" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</asp:Panel>
<asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server"
DropShadow="True" OkControlID="Button1" PopupControlID="Panel1"
TargetControlID="Button2" onokscript="OkClicked()">
</asp:ModalPopupExtender>
<p>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</p>
“Button1”的点击事件的事件Handeler是
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = TextBox1.Text;
}
答案 0 :(得分:0)
在javascript中,您不应将“Button1”作为控件的名称。相反,在您的控件的PreRender事件上,使用this.Button1.ClientID填充它。
ClientID是按钮控件的整个生成页面上的唯一标识符,允许服务器精确查明触发回发的控件。
如果不是这样,您将无法在一个页面上放置同一控件的多个实例。
在代码中:
<script type="text/javascript" language="javascript">
function OkClicked(sender, e) {
__doPostBack('<%= this.Button1.ClientID %>', e);
}
答案 1 :(得分:0)
一些建议:
您是否在此页面上进行过任何验证?如果是这样,那么当您单击“确定”按钮时,该验证可能会失败。当您单击该按钮时,ModalPopup Extender可能会关闭,如果验证失败,它可能会取消发生的事件。如果是这种情况,请添加一个属性:CausesValidation =“false”
如果这不起作用,你可以添加一个属性来回发它,我相信有一个属性 - &gt;的AutoPostBack = “真”。
@Joachim是正确的,你需要使用clientID,但与此同时,我认为你不需要调用javascript来运行后端代码。
此外,您可以考虑将其放入UpdatePanel,这样您就可以在回发页面时进行AJAX回发,而无需来回传送整个页面。