2009-11-19 122 views
1

我有一個.aspx頁下面的按鈕:C#按鈕單擊

<asp:Button runat="server" ID="bntLogin" OnClick="bntLogin_Click" Text="Login" /> 

隨着在.aspx.cs如下:

protected void bntLogin_Click(object sender, EventArgs e) 
     { 
      // 
     } 

當我嘗試建立它,我得到以下錯誤:

'ASP.reserve_aspx'不包含'bntLogin_Click'的定義,並且沒有找到接受'ASP.reserve_aspx'類型的第一個參數的擴展方法'bntLogin_Click'(您是否缺少使用方法ve或程序集引用?)

但是,當我將代碼隱藏的click事件移到它構建的標記內的腳本塊時。

任何想法?

回答

7

您確定將該方法置於正確的代碼隱藏文件中嗎?

通過查看aspx文件本身頂部的@page指令(檢查inherits屬性),檢查您使用哪個文件作爲代碼隱藏文件 - 您可能會感到驚訝。


鬆散相關的邊注:通過與對應於該方法的字符串值設置OnClick你要調用你隱式依賴於ASP.NET的AutoEventWireup功能,我不考慮是一個好方法。最好是手動關聯您的控件在你的頁面的OnInit覆蓋方法是這樣的:

bntLogin.Click += bntLogin_Click; 

通過依靠AutoEventWireup您允許ASP.NET運行時爲您創建此代碼,因爲這發生在執行時您將面臨執行時間性能損失以及冒險像您現在看到的那樣的異常。

+0

是的,我仔細檢查,它在正確的代碼隱藏和繼承正確的類。 – Neil 2009-11-19 21:23:40

+0

好的,嘗試從aspx文件中刪除'OnClick'屬性並添加上面發佈的代碼。 – 2009-11-19 21:25:58

+0

我的理解是,如果你使用AutoEventWireup,那麼就沒有必要在aspx中顯式聲明像OnClick這樣的事件處理程序。 – recursive 2009-11-19 23:57:54

0

我通常掛鉤的代碼隱藏的OnInit方法,這是一種保持在從ASP.NET 1.1(這也正是設計師會把它當時的情況。)

0

萬一你的事件仍然運行ASP.NET 1.1,刪除aspnet_client文件夾,重建並重試。