台灣最大程式設計社群網站
線上人數
627
 
會員總數:244807
討論主題:188842
歡迎您免費加入會員
討論區列表 >> ASP.NET >> [NET]請教 User Control 的問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
[NET]請教 User Control 的問題
價值 : 0 QP  點閱數:2672 回應數:3

樓主

Allen 版主
高級顧問
80846 345
27524 17435
發送站內信

捐贈 VP 給 Allen
我建立一個user control: SiteHeader.ascx,內容有一部份如下所示:
SiteHeader.ascx:
===========================================
<asp:Label ID="Greeting" Runat="server"></asp:Label>

SiteHeader.ascx.cs:
===========================================
public abstract class SiteHeader : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label Greeting;

private void Page_Load(object sender, System.EventArgs e)
{
Greeting.Text ="Welcome, "; //由於要視需要變化,因此沒直接設定屬性,而改放在這裡
}
}

因此理論上,引用此user control的網頁,應該會顯示 "welcome,"的文字
引用的網頁內容,大致如下:
default.aspx:
===========================================
...
<%@ Register TagPrefix="WroxUser" TagName="SiteHeader"
Src="SiteHeader.ascx"%>
....
<WroxUser:SiteHeader id="Header" runat="server" /> <--這裡應該顯示"welcome,"文字才對

default.aspx.cs 我沒做什麼修改, 大致如下:
===========================================
public class _Default : System.Web.UI.Page
{
protected Wrox.ThePhile.Web.Controls.Server.Navigator MenuNav;

private void Page_Load(object sender, System.EventArgs e)
{
}

override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{    
this.Load += new System.EventHandler(this.Page_Load);
}
}


但我執行後, 並不會顯示任何文字, 建置時,也沒有錯誤, 若檢視原始檔, 該部份的html tag會變成
<span id="Header_Greeting">aaa</span>
該id似乎會自動變, 而非原來的名稱"Header" or  "Greeting", 不知道各位可否看得出來, 我是哪裡做錯了?



本篇文章發表於2002-09-18 15:07
== 簽名檔 ==
=========================================
個人網站:http://www.webapp.com.tw/
Facebook粉絲頁-格子樑: https://www.facebook.com/wa.allenkuo/

ASP.NET 一對一教學資訊: http://www.webapp.com.tw/GenericArticle/view.aspx?id=1185
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

Allen
檢舉此回應
為了方便大家幫我解決問題, 我將source code放在
http://www.allenkuo.com/temp/thephile.zip (100 kb)
只要建立虛擬目錄thephile,並用VS.NET開啟thephile.sln即可
我已努力地對照過書中所附的 source code ,但無結果, 還請大家幫忙
Hint: 書中一直沒提project要reference 哪些project,因此,reference這部份我是自己摸索的
目前,我有問題的是http://XXX/thephile/default.aspx右上角應該出現welcome文字,但目前沒有出現
本篇文章回覆於2002-09-18 16:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

adida
檢舉此回應
SiteHeader.ascx
--------------------------------------------
namespace Wrox.ThePhile.Web.Controls.User
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

/// <summary>
/// SiteHeader 的摘要描述。
/// </summary>
public abstract class SiteHeader : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label Greeting;

private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);

}

override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 此呼叫為 ASP.NET Web Form 設計工具的必要項。
//
InitializeComponent();
base.OnInit(e);
}

private void Page_Load(object sender, System.EventArgs e)
{
// 將使用者程式碼置於此以初始化網頁
Greeting.Text ="Welcome, ";

if (Context.User.Identity.IsAuthenticated)
Greeting.Text += Context.User.Identity.Name;
else
Greeting.Text += "Guest User";

}


}
}
--------------------------------------
override protected void OnInit(EventArgs e)這支是要override System.Web.UI.UserControl的Oninit主要是當這個instance建立時會做的事情

下面這是關鍵.....你要把你的Page_Load事件丟給你的EventHandler
不管是button_click事件你都要加這段....其實用VS.NET他都會幫你做好這些
不過最好還是要了解一下這是幹麻的
private void InitializeComponent()
{
      this.Load += new System.EventHandler(this.Page_Load);
                                                           ~~~~~~~~~~~
}
然後
override protected void OnInit(EventArgs e)
{
InitializeComponent();//在OnInit加上這段
base.OnInit(e);//原來你繼承UserControl的OnInit程式碼
}
本篇文章回覆於2002-09-18 22:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Allen
檢舉此回應
太神奇了, 改好了, 經你說明,已了解了, 測試後 ok, 非常謝謝
:-)
本篇文章回覆於2002-09-18 22:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.