ASP.NET 常用方法类 - PageBase 页面基类

https://blog.csdn.net/mikemiller2/article/details/7452825

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;namespace MyBlog.WEB
{public class PageBase : System.Web.UI.Page{/// <summary>/// MD5加密/// </summary>/// <param name="sInputString">需要加密的字符串</param>/// <returns>加密后字符串</returns>public static string HashString(string sInputString){return
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sInputString,
"MD5");}/// <summary>/// MessageBox提示框/// </summary>/// <param name="Message">提示信息</param>public void MsgBox(string Message){ClientScript.RegisterStartupScript(this.GetType(), "", "<script
type='text/javascript'>alert('" + Message + "');</script>");return;}/// <summary>/// MessageBox提示并转向新页面/// </summary>/// <param name="Message">提示信息</param>/// <param name="URL">跳转的路径</param>public void MsgBox(string Message, string URL){ClientScript.RegisterStartupScript(this.GetType(), "", "<script
type='text/javascript'>alert('" + Message + "');window.location='" + URL + "';</script>");return;}/// <summary>/// 弹出新窗口/// </summary>/// <param name="pagePath">页面路径</param>/// <param name="winName">新窗口名称</param>/// <param name="winWidth">新窗口宽度</param>/// <param name="winHeight">新窗口高度</param>public void openNewWin(string pagePath, string winName, int winWidth, int
winHeight){ClientScript.RegisterStartupScript(this.GetType(), "", "<script
type='text/javascript'>window.open('" + pagePath + "','" + winName +
"','toolbar=no,menubar=no,titlebar=no,directories=no,resizable=no,scroll=yes,status=no,full
screen=no,center=yes,width=" + winWidth + ",height=" + winHeight + "');</script>");return;}/// <summary>/// 弹出模态窗口/// </summary>/// <param name="pagePath">页面路径</param>/// <param name="winWidth">窗口宽度</param>/// <param name="winHeight">窗口高度</param>public void openModelWin(string pagePath, int winWidth, int winHeight){string temp;temp = @"<script language='javascript'>";temp += (@"   var sPath ='" + pagePath + "';");temp += (@"         strFeatures ='dialogWidth=" + winWidth + "px;dialogHeight="
+ winHeight + "px;center=yes;scroll=no;help=no;status: No';");temp += (@"         var returnvalue = window.showModalDialog
(sPath,'brower',strFeatures);");temp += (@"</script>");ClientScript.RegisterStartupScript(this.GetType(), "message", temp);}/// <summary>/// 弹出控制父窗口的模态窗口/// </summary>/// <param name="pagePath">页面路径</param>/// <param name="winWidth">窗口宽度</param>/// <param name="winHeight">窗口高度</param>/// <param name="frameshref">控制父窗口路径</param>public void openModelWin(string pagepath, int width, int height, string frameshref){string temp = @"<script language='javascript'>";temp += (@"   var sPath ='" + pagepath + "';");temp += (@"         strFeatures ='dialogWidth=" + width + "px;dialogHeight=" +
height + "px;center=yes;scroll=no;help=no;status=no';");temp += (@"         var returnvalue = window.showModalDialog
(sPath,'brower',strFeatures);");temp += (@"         window.location.href=""" target="_blank" rel="nofollow">    temp += (@"</script>");ClientScript.RegisterStartupScript(this.GetType(), "message", temp);}/// <summary>/// 关闭本窗口/// </summary>public void CloseWin(){ClientScript.RegisterStartupScript(this.GetType(), "", "<script
type='text/javascript'>window.opener=null;window.close();</script>");return;}/// <summary>/// 弹出提示信息,并关闭本窗口/// <param name="Words">弹出提示信息内容</param>/// </summary>public void CloseWin(string Words){ClientScript.RegisterStartupScript(this.GetType(), "", "<script
type='text/javascript'>alert('"+Words+"');window.opener=null;window.close();</script>");return;}/// <summary>/// 关闭本窗口并,重新加载父窗口./// </summary>/// <param name="URL">父窗口要加载的URL</param>public void reLoadParentAndClose(string URL){ClientScript.RegisterStartupScript(this.GetType(), "", "<script
type='text/javascript'>window.opener.location='" + URL + "';window.close();</script>");return;}/// <summary>/// 显示提示信息,关闭本窗口并,重新加载父窗口./// </summary>/// <param name="Words">提示消息内容</param>/// <param name="URL">父窗口要加载的URL</param>public void ShowWords_reLoadParentAndClose(string Words,string URL){ClientScript.RegisterStartupScript(this.GetType(), "", "<script
type='text/javascript'>alert('" + Words
+ "'); window.opener.location='" + URL + "';window.close();</script>");return;}/// <summary>/// 获取客户端IP/// </summary>/// <returns></returns>public string GetClientIP(){string result = HttpContext.Current.Request.ServerVariables
["HTTP_X_FORWARDED_FOR"];if (null == result || result == String.Empty){result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];}if (null == result || result == String.Empty){result = HttpContext.Current.Request.UserHostAddress;}return result;}/// <summary>/// 获取Session值/// </summary>/// <param name="SessionID">要获取的Session值</param>/// <returns></returns>public string GetSession(string SessionID){string restr = "unkown";try{restr = Session[SessionID].ToString();}catch{}if (restr == "unkown" && restr == null && restr == ""){Response.Redirect("/Error.aspx?Type=NoPopedom");}return restr;}/// <summary>/// 写Cookie/// </summary>/// <param name="CookiesName">Cookie集名称</param>/// <param name="name">Cookie名</param>/// <param name="Value">值</param>public void WritCookie(string CookiesName, string name, string Value){HttpCookie cookie = new HttpCookie(CookiesName);cookie.Values.Add(name, Value);Response.AppendCookie(cookie);}/// <summary>/// 获取Cookie/// </summary>/// <param name="CookiesName">Cookie集名称</param>/// <param name="name">Cookie名</param>/// <param name="Value">值</param>public string GetCookie(string CookiesName, string name){string value = string.Empty;try{HttpCookie cookie = Request.Cookies[CookiesName];value = cookie.Values[name];}catch{Response.Redirect("/Error.aspx?Type=GetCookie");}return value;}}
}

if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = true; var cb_blogId = 50056;
var cb_entryId = 1615409; var cb_blogApp = "asingna"; var cb_blogUserGuid = "0fee16b0-1cf5
-dd11-9e4d-001cf0cd104b"; var cb_entryCreatedDate = '2009/12/2 15:44:00';

========

asp.net中使用BasePage判断权限

https://blog.csdn.net/cdefg198/article/details/8854001

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;using Prima.CRM.BLL;
using Prima.CRM.Model;
using System.Text;
using IcoLync.LogManager;/// <summary>
///BasePage 的摘要说明
/// </summary>
public class BasePage : System.Web.UI.Page
{static BasePage(){}private UserInfo _ui;protected virtual UserInfo Ui{get{if (Session["UserInfo"] != null)_ui = (UserInfo)Session["UserInfo"];else{if (Request.Cookies["UserName"] != null){_ui = UsersBLL.GetUserByUserName(Request.Cookies["UserName"].Value);Session["UserInfo"] = _ui;}}return _ui;}set { _ui = value; }}protected override void OnPreLoad(EventArgs e){base.OnPreLoad(e);if (base.Request.Cookies["UserName"] == null)base.Response.Redirect("~/Default.aspx");}#region 基类方法 /// <summary>/// 弹出页面/// </summary>/// <param name="url"></param>public void OpenUrl(string url){string script = string.Format("<script language='JavaScript'>window.open('" + "{0}"
+ "','" + "','');<", url);script += "/";script += "script>";ClientScript.RegisterStartupScript(this.GetType(), System.Guid.NewGuid().ToString
(), script);}/// <summary>/// 返回上一页/// </summary>public void JavascriptGoBack(){string script = "<script>history.go(-1);</script>";ClientScript.RegisterStartupScript(this.GetType(), System.Guid.NewGuid().ToString
(), script);}/// <summary>/// 执行JavaScript方法/// </summary>/// <param name="script"></param>public void JavascriptFun(string script){string AllScript = string.Format("<script>{0}</script>", script);ClientScript.RegisterStartupScript(this.GetType(), System.Guid.NewGuid().ToString
(), AllScript);}/// <summary>/// 关闭窗口/// </summary>public void JavascriptClose(){string script = "<script>window.opener = null;window.close();</script>";ClientScript.RegisterStartupScript(this.GetType(), System.Guid.NewGuid().ToString
(), script);}/// <summary>/// 跳转到其他页面/// </summary>/// <param name="url">页面地址</param>public void JavascriptGoUrl(string url){string script = string.Format("<script>location = '{0}';</script>", url);ClientScript.RegisterStartupScript(this.GetType(), System.Guid.NewGuid().ToString
(), script);}/// <summary>/// 显示信息并跳转页面/// </summary>/// <param name="message"></param>/// <param name="url"></param>public void ShowMessageAndGoUrl(string message, string url){string script = string.Format("<script>alert('{0}');location.href='{1}';</script>",
message, url);ClientScript.RegisterStartupScript(this.GetType(), System.Guid.NewGuid().ToString
(), script);}/// <summary>/// 返回上一页/// </summary>protected bool GoBack(){if (ViewState["BackUrl"] != null){Response.Redirect(ViewState["BackUrl"].ToString());return true;}elsereturn false;}#endregion 基类方法
}

BasePage.cs其他页面继承:
public partial class Index : BasePage

========

ASP.NET 使用PageBase来控制用户登陆

https://blog.csdn.net/weixin_34406061/article/details/86036895

ASP.NET 使用PageBase来控制用户登陆,有时候发现在Web.Config文件里面写了禁止匿名登录的代码以
后,要么就全部都登录不了网页,要么就是知道页面的名称,如Default.Aspx,然后在地址栏直接输入
路径然后回车就进入系统了,可能是配置文件没有写好,总之觉得这种方法不是很好,还是使用
PageBase来判断IE产生的Session数量要好一点,如下:

这个PageBase类:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;/// <summary>
///PageBase 的摘要说明
/// </summary>
public class PageBase : System.Web.UI.Page
{public PageBase(){////TODO: 在此处添加构造函数逻辑//}private string sessionUserName;private string sessionPassword;public string SessionUserName{get { return this.sessionUserName; }}public string SessionPassword{get { return this.sessionPassword; }}  protected override void OnInit(EventArgs e){if (base.Session["UserName"] == null || Session.Count < 2){Response.Redirect("~/Login.aspx");}else{this.sessionUserName = Session["UserName"].ToString();this.sessionPassword = Session["Password"].ToString();            }}
}

然后在主页面里面继承这个PageBase类,

public partial class _Default : PageBase
{
    protected void Page_Load(object sender, EventArgs e)
    {

}
}
========

Asp.net PageBase继承

https://blog.csdn.net/longvslove/article/details/7051677

加载对应Load事件和OnLoad方法,对于这个事件,相信大多数朋友都会比较熟悉,用VS.Net生成的页面
中的Page_Load方法就是响应Load事件的方法,对于每一次请求,Load事件都会触发,Page_Load方法也
就会执行,相信这也是大多数人了解ASP.Net的第一步。

Page_Load方法响应了Load事件,这个事件是在System.Web.WebControl.Control类
中定义的(这个类是Page和所有服务器控件的祖宗),并且在OnLoad方法中被触发。

很多人可能碰到过这样的事情,写了一个PageBase类,然后在Page_Load中来验证用
户信息,结果发现不管验证是否成功,子类页面的Page_Load总是会先执行,这个时候很可能留下一些安
全性的隐患,用户可能在没有得到验证的情况下就执行了子类中的Page_Load方法。

出现这个问题的原因很简单,因为Page_Load方法是在OnInit中被添加到Load事件中
的,而子类的OnInit方法中是先添加了Load事件,然后再调用base.OnInit,这样就造成了子类的
Page_Load被先添加,那么先执行了。

要解决这个问题也很简单,有两种方法:

1)       在PageBase中重载OnLoad方法,然后在OnLoad中验证用户,然后调用base.OnLoad,因为Load
事件是在OnLoad中触发,这样我们就可以保证在触发Load事件之前验证用户。

2)       在子类的OnInit方法中先调用base.OnInit,这样来保证父类先执行Page_Load

using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts;

/// <summary> 
///first write by  
///up by ahuinan 
/// </summary> 
public class PageBase:System.Web.UI.Page 

public PageBase() 

// 
//TODO: 在此处添加构造函数逻辑 
// 
}

protected override void OnInit(EventArgs e) 

base.OnInit(e); 
this.Load += new System.EventHandler(PageBase_Load); 
this.Error += new System.EventHandler(PageBase_Error);

}

//错误处理 
protected void PageBase_Error(object sender, System.EventArgs e) 

string errMsg = string.Empty; 
Exception currentError = HttpContext.Current.Server.GetLastError(); 
errMsg += "<h1>系统错误:</h1><hr/>系统发生错误, " + 
"该信息已被系统记录,请稍后重试或与管理员联系。<br/>" + 
"错误地址: " + Request.Url.ToString() + "<br/>" + 
"错误信息: " + currentError.Message.ToString() + "<hr/>" + 
"<b>Stack Trace:</b><br/>" + currentError.ToString(); 
HttpContext.Current.Response.Write(errMsg); 
Server.ClearError(); 
}

private void PageBase_Load(object sender, EventArgs e) 

if (!Page.IsPostBack) 

if (HttpContext.Current.Session["username"] != null) 

HttpContext.Current.Response.Write("登陆测试"); 

else 

HttpContext.Current.Response.Write("你不是阿会楠,不要登陆"); 



}

========

关于asp.net继承pagebase后开发时页面的布局预览不出来了

,提示创建控件出错,运行后看布局是没有
问题的,

public class PageBase : System.Web.UI.Page
{
#region 验证是否登陆
protected override void OnInit(EventArgs e)
{
}
#endregion
/// <summary>
/// 获取登录用户的各项信息
/// </summary>
/// <param name="UserName"></param>
/// <returns></returns>
public Maticsoft.Model.user UserInformation(string UserName)
{

}
/// <summary>
/// 获取登录用户的姓名
/// </summary>
/// <param name="UserName"></param>
/// <returns></returns>
public string Name(string UserName) {

}

#region Md5加密
/// <summary>
/// Md5加密
/// </summary>
/// <param name="Str">需加密值</param>
/// <returns>Md5加密值</returns>
public string Md5(string Str)
{
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
return BitConverter.ToString(provider.ComputeHash(Encoding.Default.GetBytes(Str))).Replace
("-", "").ToUpper();
}

#endregion
/// <summary>
/// 弹出一个提示框,确定转向新URL
/// </summary>
/// <param name="Str1">提示信息</param>
/// <param name="Url">新的URL</param>
public void AlertAndParentChangUrl(string Str1, string Url)
{
HttpContext.Current.Response.Write(@"<script>alert('系统提示:\n\n" + Str1 + "');if
(parent.location!=null){parent.location='" + Url + "';}else{window.location='" + Url +
"';}</script>");
}
}

你试试这样:
比如A页面 A:PageBase 确保A类是第一个类
如果A.aspx.cs 出现A不是第一个类 可能无法预览。
class B{}
class A:PageBase{}
还有你尝试重新关闭项目,重新打开看看 .net页面有时会出现无法预览的情况

都是第一个类,重新打开也是一样,无法预览,还有没有别的办法

你看你页面布局中是否缺少闭合元素 比如<div> 你少写一个</div>
<table>你少写一个</table> 确保成对出现

========

asp.net pagebase获取缓存的方法

https://www.cnblogs.com/muxueyuan/p/5579964.html

public string GetSysConfigByKey(string key)
{
    if (object.Equals(HttpContext.Current.Cache["Cache_SysConfig"], null))
    {
        this.LoadSysConfigToCache();
    }
    Hashtable hashtable = (Hashtable)HttpContext.Current.Cache["Cache_SysConfig"];
    if (hashtable.ContainsKey(key))
    {
        return hashtable[key].ToString();
    }
    return "";
}
  写入缓存

public void LoadSysConfigToCache()
{
    try
    {
        if (object.Equals(HttpContext.Current.Cache["Cache_SysConfig"], null))
        {
            DataTable allSysConfig = new SysConfigBLL().GetAllSysConfig();
            Hashtable hashtable = new Hashtable();
            foreach (DataRow row in allSysConfig.Rows)
            {
                hashtable.Add(row["ConfigKey"].ToString(), row["ConfigValue"].ToString());
            }
            HttpContext.Current.Cache.Insert("Cache_SysConfig", hashtable);
        }
    }
    catch (Exception exception)
    {
        ExceptionLogFactory.CreateObject(enuExceptionType.File, exception);
        throw;
    }
}
========

继承System.Web.UI.Page的页面基类

https://blog.csdn.net/my98800/article/details/61623952

服务器端的page类
所有我们编写的页面都继承自page类,可见page类是非常重要的,page类提供了哪些功能,直接决定了
我们的页面类可以继承什么功能,或者说,直接决定了我们的页面类功能的强大与否!那么,page类实
现了什么功能呢?如前所述的三个客户端的事实,页面类要管理ViewState,还要管理事件。page类起码
要提供这些功能以供我们的页面类重载或者调用。

page类提供了四个顺序执行的事件Init,Load,PreRender和Unload,这四个事件是一条主线,依次标明了
page类执行的各个阶段。init事件发生在所有服务器端控件的状态(ViewState)被存储之前。load事件
发生在所有服务器端控件的状态被存储之后和所有的事件被触发之前。PreRender事件发生在所有事件被
触发之后和要回发给客户端的html还没有回发(这个过程也叫"呈现")之前。unload事件发生在所有
html都回发完成以后。从这四个事件可以看到page类的大致执行步骤。

详细的page类事件顺序是这样的:获得客户端的post请求-〉page类的继承类被构造-〉page类的
ProcessRequest方法被调用->init事件被执行->page类的虚函数CreateChildControls被调用->服务器端
控件的状态(来自post变量和ViewState)被存储->load事件被执行->我们自定义的服务器端控件的事件
被执行->PreRender事件被执行->page类的虚函数Render方法被调用->page类的虚函数RenderChildren方
法被调用->Http响应发往客户端->unload事件被执行->page类的继承类被解构。我们知道一个页面上的
控件很多是包含(父子)关系,所以这里的CreateChildControls和RenderChinldren函数应该就不难理
解了。

这个事件顺序是理解asp.net页面类的关键,和前面客户端的三个事实结合起来理解,就可以解释
asp.net怎么样把客户端和服务器端结合起来,从而实现从脚本编程转移到面向对象编程。无论是微软提
供的webcontrols,或者是用户自定义控件,涉及到客户端和服务器端交互,原理都与此类似。

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CommonClass
{
 /// <summary>
 /// 页面的基类。 /// 
 /// </summary>
 public class PageBase:System.Web.UI.Page
 {
  public PageBase()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //   
  }
  /// <summary>
  /// 模块名称
  /// </summary>
  public String ModuleName
  {
   set{ViewState["ModuleName"]=value;}
   get{return ViewState["ModuleName"].ToString();}
  }
  private string _Message;
  /// <summary>
  /// 向用户显示信息提示
  /// </summary>
  public String Message
  {
   get{return _Message;}
   set{_Message = value;}
  }
  /// <summary>
  /// 检查是否有特定的权限
  /// </summary>
  /// <param name="sec">安全选项</param>
  /// <returns></returns>
//  public bool CheckPermissionSuccess(Framework.SecurityOption sec)
//  {
//   //TODO:实现Framework.Security类,如浏览、修改、管理权限
//   return Framework.Security.CheckValid(this.ModuleName,sec);
//  }
  /// <summary>
  /// 页最顶端的PlaceHolder
  /// </summary>
  public System.Web.UI.WebControls.PlaceHolder plhTopHolder;
  /// <summary>
  /// 页最底端的PlaceHolder
  /// </summary>
  public System.Web.UI.WebControls.PlaceHolder plhBottomHolder;
  
  protected override void OnInit(EventArgs e)
  {
   //初始化控件
   plhTopHolder = new PlaceHolder();
   plhBottomHolder = new PlaceHolder();
   
   //添加顶端PlaceHolder
   Control form1 = this.FindControl("Form1");
   if (form1 != null) form1.Controls.AddAt(0,plhTopHolder);

//添加页眉的用户自定义控件
   ITemplate Header = Page.LoadTemplate("~/Controls/Header.ascx");
   this.plhTopHolder.Controls.Add(Header);

//event
   this.Load+=new EventHandler(PageBase_Load);
   this.Error+=new EventHandler(PageBase_Error);
   this.PreRender+=new EventHandler(PageBase_PreRender);

base.OnInit (e);
  }
  private void PageBase_Load(object sender, EventArgs e)
  {
   //添加底端PlaceHolder
   Control form1 = this.FindControl("Form1");
   if (form1 != null) form1.Controls.Add(plhBottomHolder);
   //添加页脚的用户自定义控件
   //ITemplate Footer = Page.LoadTemplate("~/Controls/Footer.ascx");
   //this.plhBottomHolder.Controls.Add(Footer);

}
  private void PageBase_Error(object sender, EventArgs e)
  {
#if !Debug
//   Exception exc = Server.GetLastError();
//   记录未处理的错误
//   XMLLog.AddErrorLog(exc,userName);
//   Server.Transfer("~/PageError.aspx?error=" + Server.HtmlEncode(exc.Message));
#endif
  }
  private void PageBase_PreRender(object sender, EventArgs e)
  {
   //添加信息提示
   if (this._Message != null && this._Message != String.Empty)
   {
    LiteralControl litMessage = new LiteralControl("<div class=\"CssMessage\"><p>" +
Message + "</p></div>");
    plhTopHolder.Controls.Add(litMessage);
   }
  }
 }
}

========

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

https://yq.aliyun.com/articles/468601

摘要: 概念:MasterPage是ASP.NET中用于解决页面统一性的一个母版页,各个页面可以使用统一的
MasterPage来规范页面风格。(MSDN注解)母版页用作 ASP.NET Web 应用程序中内容页的模板容器和合
并页。

概念: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,需要先判断当前页面是否采用了母版页,

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

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

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

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

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

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

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

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

Asp.net PageBase学习总结相关推荐

  1. asp.net2.0学习历程 菜鸟到中级程序员的飞跃【月儿原创】

    asp.net2.0学习历程 菜鸟到中级程序员的飞跃 --30本好书点评 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.5.1 ...

  2. ASP.NET Atlas学习团队建议收集

    请在这里留下您对ASP.NET Atlas学习团队的宝贵意见和建议,让我们一起把它办得更好! 申请加入,请在http://dflying.cnblogs.com/archive/2006/05/09/ ...

  3. ASP.NET MVC学习之路由篇(2)

    ASP.NET MVC学习之路由篇(2) 原文:ASP.NET MVC学习之路由篇(2) 继ASP.NET MVC学习之路由篇(1)后继续学习. 7.解决与物理路径的冲突 当发送一个请求至ASP.NE ...

  4. ASP.NET MVC学习资料 新增几个开源项目

    ASP.NET MVC学习资料 新增几个开源项目 ASP.NET MVC MSDN API:  System.Web.Mvc Namespace (暂无中文版):  http://msdn.micro ...

  5. ASP.NET MVC学习之控制器篇

    一.前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1) ASP.NET MV ...

  6. ASP.NET Core学习资源汇总

    ASP.NET Core入门学习资源汇总篇幅比較長,分为七个部分. (一)认识.NET Core (二)Vistual Studio安装.调试 (三)Asp.Net Core入门指南与学习路线 (四) ...

  7. asp.net2.0学习历程 菜鸟到中级程序员的飞跃[z转]

    asp.net2.0学习历程 菜鸟到中级程序员的飞跃 --30本好书点评 学历历程 如果你是一个菜鸟或者自认为初学者那么本文非常适合你: 不能说这30本书就是最佳组合,但是可以说这个组合不差: 本人曾 ...

  8. ASP.NET在线学习系统

    学无止境,所以人这一辈子是一个不断学习的过程,但是传统的学习方式都是在课题上进行学习,但是课题上学习的知识都是有限的,所以如何能够通过互联网进行在线学习是很多人梦寐以求的事情,但是随着互联网的发展这一 ...

  9. (转)ASP.NET MVC 学习第一天

    天道酬勤0322 博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅  | 管理 随笔:10 文章:0 评论:9 引用:0 ASP.NET MVC 学习第一天 今天开始第一天学习asp. ...

最新文章

  1. 聪明人的游戏(3)镜子颠倒了什么?
  2. 【shell 大系】Linux Shell常用技巧
  3. 【Android 安全】DEX 加密 ( Application 替换 | 分析 Service 组件中调用 getApplication() 获取的 Application 是否替换成功 )
  4. 卷积转换为矩阵运算中填充数的计算-GEMM
  5. 【正一专栏】梅西、内马尔分开明天会更好
  6. 支持 简体,繁体,英文的js日历控件
  7. java ctr v,解决 ctrol c ctrol v 复制 粘贴 不好用的问题 只复制一次的问题
  8. Python实现简易语音转文字功能模块
  9. OpenGL ES 之 2D 纹理介绍和使用
  10. 超混沌Lorenz系统图像加密(MATLAB)
  11. 流量高峰时期的性能瓶颈有哪些、以及如何来解决
  12. 关于SQL server 2012无法打开物理文件“某某某”,操作系统错误5 :(拒绝访问)。(Microsoft SQL Server,错误 5120)
  13. php 数组处理方法,关于PHP数组问题的处理方法
  14. BZOJ 1106: [POI2007]立方体大作战tet
  15. Camtasia v2021.18汉化屏幕录像软件教程分享
  16. 汉诺塔在VC控制台的图形演示
  17. SAP 客户信贷重建一则
  18. 怎么攻击天猫商家 java,天猫店铺被恶意攻击,大家看看是怎么做的。
  19. 【精品推荐】程序员必定会爱上的十款软件:不用就太浪费了@^@
  20. android live 电视 源码,GitHub - mxiaoguang/LivePlayback: Android TV直播电视节目 ,包含各央视频道及卫视频道...

热门文章

  1. python nonetype_【已解决】Python程序错误:TypeError: ‘NoneType’ object is not iterable
  2. 基于注解的 IOC 配置——创建对象(Component、Controller、Service、Repository)注入数据(Autowired、Qualifier、Resource、Value)
  3. 实验23:测试泛型依赖注入★
  4. AOP||动态代理||AOP专业术语;
  5. dbvis 数据库工具:数据库驱动集合包获取,dbvis数据库工具安装驱动实例演示
  6. Python+selenium 自动化 - 实现自动导入、上传外部文件实例演示
  7. vue项目在IE中显示空白,报错:vuex requires a Promise polyfill in this browser
  8. 第八周实践项目8 稀疏矩阵的三元组表示的实现及应用
  9. qsort与sort()
  10. 云计算与分布式的一些关键词