[求助]ASP.NET 如何重写父方法

OVERSET2 2018-07-16 06:49:46
先抱歉各位大神,分不多,还请海涵,
问题是这样的,

public class memgPage : System.Web.UI.Page
{

public memgPage()
{
this.Load += new EventHandler(memgPage_Load);
}

protected void memgPage_Load(object sender, EventArgs e)
{
if (!IsLogin())
{
Response.Write("<script>parent.location.href='login.aspx'</script>");
Response.End();
}
}

private bool IsLogin()
{
if (Session["user"] != null)
{
return true;
}
return false;
}
}


我的一个页面继承这个类了

子页面
public partial class User_Edit : memgPage
{

//此处想处理登录超时,但是程序执行到上面就跳转了,此处如何处理?
}


谢谢了
...全文
243 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_34431829 2019-11-08
  • 打赏
  • 举报
回复
protected void memgPage_Load(object sender, EventArgs e) { if (!IsLogin()) { Response.Write("<script>parent.location.href='login.aspx'</script>"); Response.End(); } }
Tim-Zhong 2018-07-17
  • 打赏
  • 举报
回复
就事论事,可以这样改写


public class memgPage : System.Web.UI.Page
{

public memgPage()
{
this.Load += new EventHandler(memgPage_Load);
}

protected void memgPage_Load(object sender, EventArgs e)
{
if (!IsLogin())
{
if(!DoSomething()) return;

Response.Write("<script>parent.location.href='login.aspx'</script>");
Response.End();
}
}

private bool IsLogin()
{
if (Session["user"] != null)
{
return true;
}
return false;
}

protected virtual bool DoSomething()
{
return true;
}
}

public partial class User_Edit : memgPage
{
protected override bool DoSomething()
{
// do something
return false;
}
}



代码手写,仅做参考。
正怒月神 2018-07-17
  • 打赏
  • 举报
回复
解释一下你的问题
1 一级继承 memgPage : System.Web.UI.Page
2 二级继承 User_Edit :memgPage

那么问题很明显,当加载User_Edit页面时,会先去初始化memgPage的父类构造函数,
然后才实例化User_Edit的构造函数。这是你问题的重点,也是继承概念的基础知识
因此
他跑到
public memgPage()
{
this.Load += new EventHandler(memgPage_Load);
}

protected void memgPage_Load(object sender, EventArgs e)
{
if (!IsLogin())
{
Response.Write("<script>parent.location.href='login.aspx'</script>");
Response.End();
}
}

Response.Write("<script>parent.location.href='login.aspx'</script>"); 就跳转了啊。
OVERSET2 2018-07-17
  • 打赏
  • 举报
回复
引用 12 楼 sp1234 的回复:
走正规的按照接口、继承的设计和执行流程。

“偷鸡摸狗”的注入方式会造成诡异的东西,造成千里之堤毁于蚁穴的效果。所以我首先要告诉你理念,反对胡乱“玩技术”的设计方式。
您说对,寥寥几句话,感觉都点出重点,感谢
  • 打赏
  • 举报
回复
走正规的按照接口、继承的设计和执行流程。

“偷鸡摸狗”的注入方式会造成诡异的东西,造成千里之堤毁于蚁穴的效果。所以我首先要告诉你理念,反对胡乱“玩技术”的设计方式。
  • 打赏
  • 举报
回复
引用 10 楼 OVERSET2 的回复:
[quote=引用 7 楼 sp1234 的回复:]
asp.net webform 会自动查找并调用页面的几个事件处理方法,所以并不需要在实例化方法中注册(注册了反而会执行两遍)。

你应该判断一下你的 asp.net 中,有没有必要写上述代码。上述代码要么应该删除,要么就是要在子页面中重写一遍!!
上面的父类是其他同事写的,不给改,请问子页面如何才能重写父类的memgPage_Load,让他不在父类里面跳转?
[/quote]

那就不能继承它,你自己另外一遍页面。

在一个组织中,你可能没有走设计流程。如果走了设计流程、这个设计是很合理的但是还不能执行,那么从组织上说,你的同事应该被开除。
OVERSET2 2018-07-17
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
asp.net webform 会自动查找并调用页面的几个事件处理方法,所以并不需要在实例化方法中注册(注册了反而会执行两遍)。

你应该判断一下你的 asp.net 中,有没有必要写上述代码。上述代码要么应该删除,要么就是要在子页面中重写一遍!!
上面的父类是其他同事写的,不给改,请问子页面如何才能重写父类的memgPage_Load,让他不在父类里面跳转?
OVERSET2 2018-07-17
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
要注意一下,对象(类)的对象实例化方法并不能继承,所以你写的
this.Load += new EventHandler(memgPage_Load);
这个代码是不能继承的。所以你必须在子类页面的实例化方法中再写一遍!!
我重写了,可是每当他执行到父类的memgPage_Load页面就跳转了,不在执行子类的页面了,请大神赐教下,感谢

OVERSET2 2018-07-17
  • 打赏
  • 举报
回复
引用 3 楼 daixf_csdn 的回复:
问题要说清楚点。高效的解决问题,也需要会高效的提问题。
完整的提一个问题,我一般都会提交:
1、问题场景,包括操作系统,数据库,技术栈
2、我的关键代码
3、我的具体错误

你的“报什么找不到什么方法····之类的话”,具体是什么错误?说这么模糊是让大家猜么?请贴错误的具体图片或者文字!

提示 :没有找到适合的方法来重写
  • 打赏
  • 举报
回复
asp.net webform 会自动查找并调用页面的几个事件处理方法,所以并不需要在实例化方法中注册(注册了反而会执行两遍)。

你应该判断一下你的 asp.net 中,有没有必要写上述代码。上述代码要么应该删除,要么就是要在子页面中重写一遍!!
  • 打赏
  • 举报
回复
要注意一下,对象(类)的对象实例化方法并不能继承,所以你写的
this.Load += new EventHandler(memgPage_Load);
这个代码是不能继承的。所以你必须在子类页面的实例化方法中再写一遍!!
  • 打赏
  • 举报
回复
virtual protected void memgPage_Load(object sender, EventArgs e)
{
if (!IsLogin())
{
Response.Write("<script>parent.location.href='login.aspx'</script>");
Response.End();
}
}
圣殿骑士18 2018-07-17
  • 打赏
  • 举报
回复
你子页面代码也没有贴,少太多东西了。
圣殿骑士18 2018-07-17
  • 打赏
  • 举报
回复
问题要说清楚点。高效的解决问题,也需要会高效的提问题。
完整的提一个问题,我一般都会提交:
1、问题场景,包括操作系统,数据库,技术栈
2、我的关键代码
3、我的具体错误

你的“报什么找不到什么方法····之类的话”,具体是什么错误?说这么模糊是让大家猜么?请贴错误的具体图片或者文字!
OVERSET2 2018-07-16
  • 打赏
  • 举报
回复
引用 1 楼 daixf_csdn 的回复:
重写父类,和asp.net没有任何关系,它只是c#的基本语法。你需要先熟悉c#的继承。

了解下override
public override ActionResult Index()
{
}
大神,你好,我之前是这么写的,还是报错,才来问的,之前是这样的:
public override void memgPage_Load(object sender, EventArgs e)
{
}
报什么找不到什么方法····之类的话,请大神赐教下,刚前端转了后端·····
圣殿骑士18 2018-07-16
  • 打赏
  • 举报
回复
重写父类,和asp.net没有任何关系,它只是c#的基本语法。你需要先熟悉c#的继承。

了解下override
public override ActionResult Index()
{
}

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧