![](/img/trans.png)
[英]Moving asp.net team from VB.Net to C#, seems are we are missing something with wiring up events?
[英]Converting VB.NET Web Form to C# and wiring up events
在我的VB.NET網頁中,我有此標准事件。 注意事件聲明中的“句柄”子句。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
在我的C#網絡應用中,我有以下內容:
protected void Page_Load(object sender, System.EventArgs e)
{
由於C#沒有等效的“句柄”,並且從我所看到的來看,事件處理程序使用委托+ =語法進行了連接,因此我一直在尋找它,但無法在aspx頁面aspx.cs中找到它。文件或aspx.designer.cs文件。
在VB中,我將在“代碼編輯器”窗口的頂部有兩個下拉列表,並且可以選擇Web窗體上的任何對象或Web窗體本身,然后查看該對象的可能事件。 選擇事件將帶我進入事件處理程序,或者如果事件不存在,它將為我創建存根。
我知道C#(在VB中也是如此)的“屬性”窗口具有一個“事件”選項卡,其中顯示了所選對象GUI對象的事件列表,但是“頁面”並未顯示為可以選擇的對象。
C#在哪里定義事件與處理程序的連接?
如何為Page事件處理程序例程生成存根? 我知道默認情況下會出現該句柄,但是如果刪除了該句柄或者我想添加Page_initialize代碼怎么辦? 是否有一種簡單的方法來獲取存根,還是需要進入對象瀏覽器獲取語法?
C#在哪里定義事件與處理程序的連接?
Page_Load
是一個自動掛接的特殊事件。 這是保留名稱。 因此,您無需為連接此事件做任何事情。 只需在后面的代碼中聲明即可。
在C#Web窗體中,后面的標記代碼上的@Page指令AutoEventWireup屬性默認為true,而不是VB的false。 要查看@Page指令及其所有相關屬性,請在解決方案資源管理器中右鍵單擊您的網頁,然后選擇“查看標記”
使用AutoEventWireup = true時,運行時將自動連接它在代碼中找到的與Page_ EventName命名約定形式匹配的事件處理程序。 但是,您可以關閉此功能,並使用標准C#+ =分配手動連接頁面事件處理程序。 如果使用AutoEventWireup = true,則不僅方法名稱必須匹配,而且顯然還必須具有適當的方法簽名,以便在運行時自動連接。
請參見此KB,以獲取有關AutoEventWireup的良好討論: http : //support.microsoft.com/kb/324151
關於您的第二個問題,在C#中無法像在VB中那樣為頁面事件生成“存根”。 正如其他人指出的那樣,包括您自己在內-C#中具有類似的功能,可通過屬性窗口生成控制對象事件存根。 但是,對於頁面事件,您必須知道事件名稱和適當的簽名並自己編寫代碼。
namespace MyNamespace
{
public class Myclass : System.Web.UI.Page
{
override protected void OnInit(EventArgs e)
{
this.Load += new System.EventHandler(this.Page_Load);
}
private void Page_Load(object sender, EventArgs e)
{
}
}
}
參考: https : //support.microsoft.com/zh-cn/help/324151/how-to-use-the-autoeventwireup-attribute-in-an-asp-net-web-form-by-usi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.