作者petrushka (不放过自己)
看板C_Sharp
标题Re: [问题] ASP.NET的使用者控制项呼叫aspx下的func
时间Wed Apr 15 19:47:18 2009
如果有一些Method想要让ASP.NET Pages直接共用,那麽我会建议建立自己的Base Page Class。
并让需要使用共用的Method的ASP.NET Pages继承它。
当然,如果该Page上的Web User Control想要调用那些共用的Method也是有办法的。
请参考以下程式码大概的说明:
1.
// 建立一个Base Page Class并且继承 System.Web.UI.Page
public class MyBasePage1 : System.Web.UI.Page
{
// 这是要共用的Method
public void DoSomething()
{
}
}
2. 修改ASP.NET Page使其改继承自订的Base Page Class,
由於自订的类别又继承自System.Web.UI.Page,所以对ASP.NET来说没影响。
// 这是第一个ASP.NET Page,改继承 MyBasePage1
public partial class _Default : MyBasePage1
{
protected void Page_Load( object sender, EventArgs e )
{
// 呼叫共用的Method
DoSomething();
}
}
// 这是第二个ASP.NET Page,同样改继承 MyBasePage1
public partial class Default2 : MyBasePage1
{
protected void Page_Load( object sender, EventArgs e )
{
// 呼叫共用的Method
DoSomething();
}
}
因此,以上两个ASP.NET Pages都能够呼叫在MyBasePage1类别内的Method,达到共用目的。
3. Web User Control要调用MyBasePage1的Method
// 这是一个 WebUserControl...
public partial class WebUserControl1 : System.Web.UI.UserControl
{
protected void Page_Load( object sender, EventArgs e )
{
// 取得所属页面的参照
MyBasePage1 parentPage = this.Page as MyBasePage1;
// 呼叫该页面上共用的Method
parentPage.DoSomething();
}
}
以上,希望不难理解。
其实Page与User Control在执行时期都只是一些类别物件而已,要让它们能够
达到相互认识,互通有无,还有不少方式,甚至有些是更有弹性的做法。
更弹性的做法,有一些是Design Pattern所提到的方式,就自己思考看看噜。
另外提醒,上述做法,你可以不只拥有一个自订的Base Page Class。
可依实务需求去切割成不同目的的Class。譬如说,管理者页面专属的Base Page Class。
又采上述做法的专案较大时,只有一层的Base Page Class,可能会稍嫌不足,那就可以再
拉出一层。
因为你原文提到要让User Control去调用Page的Method,所以我提出上述方法。
以我的经验而言,User Control不知道Page的细节是比较好的^^"
上述方式的原理同样可以施於Web User Control,让Page去设定Web User Control的自订属
性,或是调用Web User Control的Method。
※ 引述《grassboy2 (活力花俏草儿仔政﹞O花俏)》之铭言:
: ※ [本文转录自 Web_Design 看板]
: 作者: grassboy2 (活力花俏草儿仔政﹞O花俏) 看板: Web_Design
: 标题: [问题] ASP.NET的使用者控制项呼叫aspx下的function?
: 时间: Wed Apr 15 05:19:58 2009
: 嗯嗯…
: 最近开始接触ascx这个玩意…
: 话说我是用C#写的…
: 然後我在index.aspx.cs下,针对index.aspx的某个PlaceHolder
: 让他载入userControl.ascx这个使用者控制项…
: 那…如果我在index.aspx.cs有一支function f()
: 那…我有办法在userControl.ascx.cs档下面呼叫f()吗?
: 还是要把f()也copy到userControl.ascx.cs下@@a
: (感觉这样写有点难维护的说>"<)
--
对於已经无法拥有的
唯一能做的是
不要忘记
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.224.212.65
※ 编辑: petrushka 来自: 125.224.212.65 (04/15 19:55)
1F:→ TonyQ:如果method量很大 , 应该建立工具类别来进行比较好. 04/15 21:28
2F:推 lcloud:会共用的话应该像楼上说的 把物件拉出来 04/17 23:25