2011-02-22 70 views
5

我已經在類庫中創建了一個類,並且我將這個控件添加到了default.aspx中,但是我的代碼並沒有觸發page_load事件。這裏是代碼:Page_Load在UserControl中沒有觸發

我該怎麼做錯了?

頁面加載但不顯示頁面上的標籤。我已正確無誤地將控件添加到頁面。我有活動在那裏添加了註冊標籤。

HTML標籤:<RandoIntegerControls:RandomIntegerControl ID="RandomIntegerControl1" runat="server"></RandoIntegerControls:RandomIntegerControl>

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Web.UI.WebControls; 

namespace CSIMedia.WebControls 
{ 

    public class RandomIntegerControl : PlaceHolder 
    { 

    private Label _Label; 


    public RandomIntegerControl() 
    { 

    } 

    private void Page_Load(Object sender, EventArgs e) 
    { 

     this._Label = new Label(); 
     this.Controls.Add(this._Label); 
     this._Label.Text = "Enter random values:"; 

    } 

    } 
} 

Default.aspx頁面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<%@ Register TagPrefix="RandoIntegerControls" Assembly="CSIMedia.WebControls" Namespace="CSIMedia.WebControls"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <RandoIntegerControls:RandomIntegerControl ID="RandomIntegerControl1" runat="server"></RandoIntegerControls:RandomIntegerControl> 
    </div> 
    </form> 
</body> 
</html> 
+0

您是否在使用它的aspx文件中包含自定義控件的.ascx文件? – skaz 2011-02-22 21:02:28

+0

不,我刪除它。我還沒有創建任何ascx文件。我已經創建了這個類作爲一個class.cs文件,並將這個控件類添加到頁面。但我已經添加了default.aspx頁面,我仍然沒有運氣。 – redoc01 2011-02-22 21:07:23

+0

你可以顯示你添加控件到頁面的代碼嗎? – skaz 2011-02-22 21:12:01

回答

2

您從佔位符,這是一個Web控件,不處理Page_Load事件繼承。只有用戶控件(.ascx)將能夠隱式處理該事件。

通過您發佈的代碼的外觀,您可能會更好地使用UserControl,或者如果您需要它在多個項目中可重複使用,請從頭開始創建Web控件。

+0

@clint是不是我所做的,從頭創建一個webcontrol?你的意思是我需要從page_load的web控件繼承來觸發? – redoc01 2011-02-22 23:23:28

+0

不,要從頭開始創建Web控件,您需要從Web控件本身繼承並覆蓋相關方法來創建控件。從PlaceHolder繼承意味着功能已經發生。 – Clint 2011-02-23 09:00:35

+0

你被要求做什麼? – Clint 2011-02-23 09:05:30

8

試試這個:

public RandomIntegerControl() 
{ 
    this.Load += Page_Load; 
} 

在頁面(和用戶控件),Page_Load方法通常是連接自動感謝這個屬性:

<%@ Page ... AutoEventWireup="true" ... %>

如果你沒有一個aspx/ascx文件,它不會自動發生,但您仍然可以使用上面的代碼手動掛接它。

+0

當我將此代碼轉換爲vb.net時,一切正常。我是一名VB.Net開發人員,但被要求在我申請的角色中使用c#作爲測試項目,那麼如何快速實現這一目標,以便我可以快速完成測試? – redoc01 2011-02-22 23:06:24

+0

對不起,我不確定我是否理解這個問題。我寫的代碼是C#,你想要一個VB版本嗎? – 2011-02-22 23:46:51

+0

真棒,爲我工作完全謝謝Xavier :) – timothyclifford 2012-02-21 00:19:19

0

事實證明,您可以覆蓋aspx標記文件中的Page_Load。該文件從基本文件繼承。

<%@ Control Language="C#" AutoEventWireup="true" 
    CodeBehind="TestUserControl.ascx.cs" Inherits="TestUserControl" %> 

實施例來覆蓋:

<script language="C#" runat="server"> 
    public void Page_Load(object sender, EventArgs e) 
    { 
     ... 
    } 
</script> 

該功能覆蓋代碼隱藏版本。