0

我遇到了消息框用户控件的问题。我希望有一个可以给定消息的控件,并且用户可以通过单击按钮将其关闭,该按钮可以插入到许多地方。我已将 javascript 应用到消息框控件中,希望我可以集中处理与消息框有关的一切,但是当浏览到添加了消息框控件的页面时,我收到此错误:

CS1061: 'ASP.components_messagebox_ascx' does not contain a definition for 'HideBox' and no extension method 'HideBox' accepting a first argument of type 'ASP.components_messagebox_ascx' could be found

控制是这样的:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Messagebox.ascx.cs" Inherits="FosterNetwork.Components.Messagebox" %>
<script type="text/Javascript">
    function HideBox() {
        document.getElementById("PNL_Messagebox").setAttribute("visible", false);
    }
</script>
<asp:Panel ID="PNL_Messagebox" runat="server">
    <asp:Label ID="LBL_Message" runat="server" />
    <asp:Button ID="BTN_Ok" Text="Ok" OnClick="HideBox()" runat="server" /> <!--Error happens on this line-->
</asp:Panel>

我相当肯定我做对了,但如果它不起作用,显然我做错了什么。任何关于这种情况的线索都将是伟大的。

附录:如果我注释掉按钮控件,页面加载正常,脚本也加载正常(查看页面源)

4

2 回答 2

1

Onclick 寻找服务器端功能,而不是 javascript。或者,将您的按钮定义为<input type='button' onclick='HideBox'或将当前代码更改为:

<script type="text/Javascript">
function HideBox() {
    document.getElementById("<%= PNL_Messagebox.ClientID %>").setAttribute("visible", false);
    return false;
}
</script>
<asp:Button ID="BTN_Ok" Text="Ok" OnClientClick="return HideBox()" runat="server" />

返回 false in OnClientClick,防止 asp 按钮回发。

编辑:正如蒙蒂所说,您的面板控件的客户端 ID 未在代码中正确设置。

于 2012-08-09T11:34:54.003 回答
1

您引用的控件 ID 不是客户端 ID,而是服务器 ID。因此,从 JavaScript 函数中的控件中检索“ClientID”,然后使用“OnClientClick”属性显示 JavaScript 消息。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Messagebox.ascx.cs" Inherits="FosterNetwork.Components.Messagebox" %>
<script type="text/Javascript">
    function HideBox() {
        document.getElementById("<%= PNL_Messagebox.ClientID %>").setAttribute("visible", false);
    }
</script>
<asp:Panel ID="PNL_Messagebox" runat="server">
    <asp:Label ID="LBL_Message" runat="server" />
    <asp:Button ID="BTN_Ok" Text="Ok" OnClientClick="HideBox()" runat="server" /> <!--Error happens on this line-->
</asp:Panel>
于 2012-08-09T11:35:23.173 回答