关于ASP.NET中使用MasterPage和PageBase页面基类的一些体会

简介:

概念:MasterPage是ASP.NET中用于解决页面统一性的一个母版页,各个页面可以使用统一的MasterPage来规范页面风格。(MSDN注解)母版页用作 ASP.NET Web 应用程序中内容页的模板容器和合并页。母版页为在一组内容页之间共享结构和内容提供了一条方便的途径。可使用内容占位符定义母版页中要用内容页的内容加以替换的部分。

PageBase继承System.Web.UI.Page类,网站中的各个页面继承PageBase类,在PageBase类中可以做统一的逻辑控制

最近开发中涉及到MasterPage和PageBase的使用问题,WEB应用程序中的大多数页面都继承了MasterPage页面,具备统一的风格及部分代码逻辑,但是,也有一部分页面是需要特殊处理的并不需要继承MaterPage,比如一些弹出页面或特别处理的页面等等,这就需要另外再写一个页面基类来处理身份验证,URL参数控制,页面容错等逻辑,于是选择了PageBase,考虑到职责应该单一,让MasterPage只是处理跟界面统一风格有关的部分,而PageBase处理统一的逻辑控制,项目进行的还算顺利。

解决问题

但是不久后开发中又出现了另外一个问题,由于项目特殊性,需要我们的程序支持同一台机器可以同时登录两个用户,Session并不能很好的解决这个问题,于是我们设计了一个方案就是用户登录后其ID随URL存入页面上的一个隐藏文本框内,但这个TextBox放置的位置是个问题,因为系统中现有的页面一部分使用了MasterPage,一部分页面并没有使用MaterPage,如果在MasterPage中放置的话,有些页面会因为没有这个文本框而丢失用户信息了,于是我们让系统中的所有页面都继承了PageBase,并在PageBase中动态向当前页面添加TextBox控件来存储用户ID,当每个页面加载的时候基类会判断两个条件

添加控件:向页面添加TextBox来存储用户ID,需要先判断当前页面是否采用了母版页,

  1. 如果采用了母版页则在母版页的某个ContentPlaceHolder中放置一个TextBox,
  2. 如果没有采用则直接在页面的Form中添加TextBox,

如下图:

     

      

这样可以保证系统中所有采用PageBase作为基类的页面中都会含有这个文本框控件;

控件赋值:给页面中的TextBox赋值,

  1. 由于这种方法必须要求页面跳转是Server.Transfer或者控件PostBackUrl到服务器,所以需要判断页面的URL中是否有参数传入,因为用户登录或其他特定操作时ID将会作为URL传入,如果有参数则取得参数并赋值给当前页面的TextBox(这里需要判断本页是否采用了母版页,若采用则直接赋值给母版页中的TextBox,若没有采用则直接赋值给当前页面的TextBox)
  2. 如果没有参数则判断当前页面是否具备PreviousPage属性值,如果具备则判断PreviousPage是否采用了母版页并从页面上的TextBox中取值赋给当前页面中的TextBox,如果没有PreviousPage属性也没有URL参数值则终止赋值操作。

如图:

 

  

页面取值:我们可以写一个公共方法int GetUserID(this.Page)来取得当前页面的用户ID,这样的话只要牵扯到取得当前用户ID就可以直接调用方法来取了,并且节省了很多的代码。

取得页面TextBox值的公共方法如下:

 

  

至此,页面中必有这个控件,且控件中必然会有值,开发时可以在任何需要使用当前用户ID的地方直接调用GetUserID(this.Page)方法来取得当前页面的用户ID,从而实现了用户ID跟页面一起走的效果,避免了使用Session造成的会话覆盖。

这就是MasterPage和PageBase搭配完成的一个小功能:两个人可以同时使用一台电脑登录同一个系统。您有更好的方法么?




    本文转自wengyuli 51CTO博客,原文链接:http://blog.51cto.com/wengyuli/588625,如需转载请自行联系原作者




相关文章
|
4月前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
51 5
|
7月前
|
开发框架 .NET 中间件
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (2)第七天Blazor班级管理页面编写和接口对接
160 7
|
4月前
|
开发框架 前端开发 .NET
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
|
7月前
|
开发框架 .NET C#
Asp.net 2.0专题之一:MasterPage(2)
Asp.net 2.0专题之一:MasterPage(2)
42 1
|
7月前
|
开发框架 .NET C#
Asp.net 2.0专题之一:MasterPage(2)
Asp.net 2.0专题之一:MasterPage(2)
41 0
|
开发框架 数据可视化 前端开发
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
ASP.NET Core MVC+Quartz实现定时任务可视化管理页面
595 0
|
开发框架 JavaScript .NET
Asp.net C#页面传参的几种方式
Asp.net C#页面传参的几种方式
152 0
mvc.net分页查询案例——前台页面(Index.aspx)
mvc.net分页查询案例——前台页面(Index.aspx)
|
开发框架 JSON 前端开发
【C#】.net core2.1,自定义全局类对API接口和视图页面产生的异常统一处理
在开发一个网站项目时,异常处理和过滤功能是最基础的模块 本篇文章就来讲讲,如何自定义全局异常类来统一处理
241 0