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>

私はこれを正しく行ったと確信していますが、うまくいかない場合は明らかに何か間違ったことをしています。状況に光を当てると、壮大になります。

補遺: Button コントロールをコメントアウトすると、ページが正常に読み込まれ、スクリプトも正常に読み込まれます (ページのソースを表示)

4

2 に答える 2

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 に答える
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 を返すとOnClientClick、asp ボタンがポストバックされなくなります。

編集: Monty が述べたように、パネル コントロールのクライアント ID がコードで正しく設定されていません。

于 2012-08-09T11:34:54.003 に答える