2012-08-09 65 views
0

我有一個消息箱用戶控件的問題。我希望有一個可以給予消息的控制,並且用戶可以通過點擊一個按鈕來解僱,該按鈕可以插入到很多地方。 我已經應用了javascript改成一個希望在MessageBox控制,我可以把一切都做的消息框集中,但與在MessageBox控制瀏覽一個網頁時,加入我得到這個錯誤:在asp中彈出消息框,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控件的頁面加載罰款,和腳本加載也沒關係(覽頁面的源代碼)

回答

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> 
+0

血腥地獄。忘記了血腥的OnClientClick。 serverID我完全沒有意識到。你能發佈一篇文章,我可以閱讀你彈出的代碼getElemenyById,所以我不會摸索,並在下次失敗:D,將定時器血腥允許時接受你的答案。 ¬_¬ – Skintkingle 2012-08-09 11:38:15

+0

當然,對於ClientID請參閱:http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientid.aspx。對於內聯標記(<%=是Response.Write的簡化標記),請參閱:http://naspinski.net/post/inline-aspnet-tags-sorting-them-all-out-(3c25242c-3c253d2c-3c252c- 3c252c-等).ASPX。祝你好運。 – 2012-08-09 11:41:24

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" /> 

OnClientClick返回false,防止回發asp的按鈕。

編輯:正如Monty提到的,您的面板控件的客戶端ID未正確設置在您的代碼中。

+0

@Skintkingle:有一個關於一個偉大的教程在http://naspinski.net/post/inline-aspnet-tags-sorting-them-all-out-(3c25242c-3c253d2c-「的WebForms內標記語言」 3c252c-3c252c-etc).aspx – Kamyar 2012-08-09 11:44:00