新来,散分200,请问大家重写Page类,大家一般作什么,我学了没有多久,请大家关照。^@^
我大上个月才学的ASP.net,以前会ASp,认了个老师。
他说重写Page类,以后好维护。可是我不知道,通常,重写Page基类,都作些什么,请有经验的高手都说说。谢谢了。最好给一些代码学习。谢谢
在线
是200分。
[解决办法]
进行Session数据对象的转换
操作一些页面会出现的共同元素
进行页面级权限认证等等
一般都是企业级应用的时候需要做更多的事情
现在可能也会操作Profile
[解决办法]
通用发放包括类似 输入字符处理,输出处理...
[解决办法]
设置MasterPageFile
[解决办法]
public class FriendsBase : System.Web.UI.Page //必须继承于Page类
{
protected string HeaderMessage = String.Empty;
protected string HeaderIconImageUrl = String.Empty;
FriendsFooter _footer;
FriendsHeader _header;
SubHeader _subheader;
//重写OnInit方法,将一些自定义控件及用户控件载入,并都放入0位置
protected override void OnInit(EventArgs e)
{
_header = (FriendsHeader) LoadControl
(Request.ApplicationPath + Path.AltDirectorySeparatorChar +
"Controls/FriendsHeader.ascx ");
_footer = (FriendsFooter) LoadControl
(Request.ApplicationPath + Path.AltDirectorySeparatorChar +
"Controls/FriendsFooter.ascx ");
_subheader = new SubHeader();
// Add to the Controls hierarchy to get proper
// event handling, on rendering we position them
Page.Controls.AddAt(0, _header);
Page.Controls.AddAt(0, _subheader);
Page.Controls.AddAt(0, _footer);
base.OnInit(e);
}
//重写Render方法
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
//移除页面类所包含的各个层次级别中的控件 Remove the controls from their current place in the hierarchy
Page.Controls.Remove(_header);
Page.Controls.Remove(_subheader);
Page.Controls.Remove(_footer);
Debug.Assert(
Page.Controls[1].ToString()== "System.Web.UI.HtmlControls.HtmlForm ",
"Form control not found ",
"Any FriendsReunion page requires that a Form control be " +
"located at index 1 of the Page.Controls collection ");
// 页面Page为索引号为1的控件Get a reference to the form control
HtmlForm form = (HtmlForm)Page.Controls[1];
//在页面上重新分配各种控件 Reposition the controls on the page
form.Controls.AddAt(0, _header );
form.Controls.AddAt(1, _subheader );
form.Controls.AddAt(form.Controls.Count, _footer );
//Set current values
_header.Message = HeaderMessage;
_header.IconImageUrl = HeaderIconImageUrl;
//调用基类的Render方法
base.Render(writer);
}
}
[解决办法]
比如:你的某些页面,需要授权后才可以访问,你每个页面都判断Session就比较麻烦.这时你就可以继承Page类,在自己的类中重写Page_Load方法,来判断Session,这样你的其它页即不用从System.Web.Ui.Page来继承,而直接继承你自己的类就可以了.
还有比如:在做多语言的应用时,你可能要重写InitializeCulture 方法
[解决办法]
高人来了不少,我再说几句
既然要重写Page基类就要,注意一下执行顺序以免出错
客户端访问都会有一个HttpApplication全程服务,
HttpApplication的确切执行顺序是:
BeginRequest ->
AuthenticateRequest ->
AuthorizeRequest ->
ResolveRequestCache ->
构建页面(在这里页面构造函数被调用) ->
AcquireRequestState(这里才初始化当前上下文的Session) ->
PreRequestHandlerExecute ->
进入页面执行生命周期(开始Page_Init) ->
PostRequestHandlerExecute ->
ReleaseRequestState ->
UpdateRequestCache ->
EndRequest
[解决办法]
在重写的Page基类中,大家平常都会写些什么呢??
师父说,利用项目以后的维护??
================
1。
根据每个项目需求的不一样,实现的基类,当然不一样
既然是基类,直观上讲,就是实现一些公共的行为。
假如,你很多页面需要执行计算 n! ,
那么你可以在你的基类定义个
void Perm(int[] array, int startIndex, int endIndex)
方法,提供这项功能,子页面直接调用
2。
这叫做, 后期维护 以及 功能扩展
你站点的所有页面,继承自你自己的定义的类,
假如某天,客户要求增加一项新的功能,
或者,
某天忽然你发现一个更加优秀的计算 全排列 的算法,
那么,你只需要修改基类的 Perm 方法,
所有调用此方法的子类页面,均无需做改动
understand ?
3。
事实上,这两个问题完全是一个 OOP 里面关于 继承 的概念,与 asp.net 并没有直接的关系,
如果你准备转入 .net 开发,那么你需要熟悉 OOP
Good Luck!
[解决办法]
页面公共方法,或者继承这个类的页面都需要实现的功能都可以写在这个类中。
一句话,那是相当的方便。
[解决办法]
上面说得太复杂,既然你学个ASP,那么打个很恰当的比喻,这个就相当于ASP里面的INCLUDE FILE,很有必要吧?呵呵。
=========
晕, 完全不是一回事
asp 的 include 对应 asp.net 的 用户控件 UserControl
[解决办法]
一句话回答楼主:重写Page类可以避免重复劳动