PageBase.cs
上传用户:autodoor
上传日期:2022-08-04
资源大小:9973k
文件大小:7k
源码类别:

.net编程

开发平台:

Others

  1. using System;
  2. using System.Web;
  3. using System.Web.UI;
  4. using System.Web.SessionState; 
  5. using System.Diagnostics;
  6. using qminoa.Common;
  7. using qminoa.Common.Data;
  8. using qminoa.DA;
  9. namespace qminoa.Webs
  10. {
  11. /// <summary>
  12. /// 页面基类
  13. /// </summary>
  14. public class PageBase : System.Web.UI.Page
  15. {
  16. #region 构造函数
  17. /// <summary>
  18. /// 空构造函数
  19. /// </summary>
  20. public PageBase()
  21. {
  22. }
  23. #endregion
  24. #region 属性
  25. /// <summary>
  26. /// 登录ID
  27. /// </summary>
  28. // public string Loginid = "";
  29. /// <summary>
  30. /// 员工号:唯一标识当前用户
  31. /// </summary>
  32. public string Empid = "-1";
  33. /// <summary>
  34. /// 当前员工姓名
  35. /// </summary>
  36. public string EmpName="";
  37. /// <summary>
  38. /// 功能名称
  39. /// </summary>
  40. public string FunName="";
  41. /// <summary>
  42. /// 窗体功能代码
  43. /// </summary>
  44. public string FunctionName
  45. {
  46. get
  47. {
  48. return GetViewState("FunctionName"); 
  49. }
  50. set
  51. {
  52. SetViewState("FunctionName",value); 
  53. }
  54. }
  55. /// <summary>
  56. /// 权限代码
  57. /// </summary>
  58. public int EmpRightCode
  59. {
  60. get
  61. {
  62. try
  63. {
  64. return CheckAuth(); 
  65. }
  66. catch(NullReferenceException)
  67. {
  68. return -1;
  69. }
  70. }
  71. }
  72. #endregion
  73. #region 方法
  74. /// <summary>
  75. /// 从ViewState中获取某个属性的值。如果该属性不存在,返回空字符串。
  76. /// </summary>
  77. /// <param name="PropertyName">属性名称</param>
  78. /// <returns>属性值(属性不存在时返回空字符串)</returns>
  79. public string GetViewState(string PropertyName)
  80. {
  81. try
  82. {
  83. return ViewState[PropertyName].ToString()  ;
  84. }
  85. catch(NullReferenceException)
  86. {
  87. return "";
  88. }
  89. }
  90. /// <summary>
  91. /// 设置ViewState中某个属性的值
  92. /// </summary>
  93. /// <param name="PropertyName">属性名称</param>
  94. /// <param name="PropertyValue">属性值</param>
  95. public void SetViewState(string PropertyName, string PropertyValue)
  96. {
  97. ViewState[PropertyName]=PropertyValue;
  98. }
  99. /// <summary>
  100. /// 权限检验函数
  101. /// </summary>
  102. /// <returns>int</returns>
  103. public int CheckAuth()
  104. {
  105. int _empid = Convert.ToInt16(this.Empid);
  106. string _funcname = this.FunName;
  107. CheckEmpRight myCheckAuth_DA = new CheckEmpRight();
  108. return myCheckAuth_DA.GetEmpRight(_empid,_funcname);
  109. }
  110. /// <summary>
  111. /// 给定模块名称,权限检验函数
  112. /// </summary>
  113. /// <returns>int</returns>
  114. public int CheckAuth(string funcname)
  115. {
  116. int _empid = Convert.ToInt16(this.Empid);
  117. CheckEmpRight myCheckAuth_DA = new CheckEmpRight();
  118. return myCheckAuth_DA.GetEmpRight(_empid,funcname);
  119. }
  120. /// <summary>
  121. /// 页面初始函数
  122. /// </summary>
  123. /// <param name="fName">模块名称</param>
  124. /// <param name="isChecked">是否验证</param>
  125. public void PageBegin(string fName,bool isChecked)
  126. {
  127. //--------------------------------------------
  128. //设定页面入口的模块名称。没有为空。
  129. //如果本页不定义,一定要从前一页确定。
  130. if (ValidateUtil.isBlank(fName))
  131. {
  132. this.FunctionName=this.GetParaValue("FunctionName");  
  133. this.FunName =this.FunctionName; 
  134. }
  135. else
  136. {
  137. this.FunName =fName ;
  138. this.FunctionName =fName;
  139. }
  140. //---------------------------------------------
  141. //读取当前用户
  142. //第一步:获取用户唯一标识Empid
  143. this.Empid=this.GetParaValue("EmpID"); 
  144. this.EmpName =this.GetParaValue("username"); 
  145. // this.Loginid=this.GetParaValue("LoginID"); 
  146. //如果Empid为空,表示没有当前用户,则跳转至登录页面。
  147. if (ValidateUtil.isBlank(this.Empid)) 
  148. {
  149. Response.Redirect(Application["vRoot"]+"/login.aspx");  
  150. }
  151. //-----------------------------------------------------
  152. //第二步:判断是否具有本页访问权限
  153. if (isChecked && this.CheckAuth() == -1)
  154. {
  155. Response.Redirect(Application["vRoot"]+"/login.aspx");  
  156. }
  157. }
  158. /// <summary>
  159. /// 记录操作日志
  160. /// </summary>
  161. /// <param name="operation">操作描述</param>
  162. public void WriteOptLog(string operation)
  163. {
  164. //创建登录信息数据结构
  165. LogData mylogdata = new LogData();
  166. //调用数据访问层操作日志服务
  167. LogDB LogDataAccess = new LogDB();
  168. //填写操作日志信息
  169. mylogdata.OperatorID = this.Empid;
  170. mylogdata.OperatorName = this.EmpName;
  171. mylogdata.OperateTime = DateTime.Now.ToString();
  172. mylogdata.FuncName = this.FunName;
  173. mylogdata.OperationDescription = operation;
  174. //记录操作日志
  175. LogDataAccess.WriteOperationLog(mylogdata);
  176. }
  177. /// <summary>
  178. /// 获取页面参数的值
  179. /// </summary>
  180. /// <param name="oSession">Page.Session</param>
  181. /// <param name="oRequest">Page.Request</param>
  182. /// <param name="paraName">参数名称</param>
  183. /// <returns>参数值,字符串形式</returns>
  184. public string GetParaValue(HttpSessionState oSession, HttpRequest oRequest,string paraName)
  185. {
  186. string strValue="";
  187. //如果Session中能够找到相应的参数值,则返回参数值
  188. try
  189. {
  190. strValue=oSession[paraName].ToString();
  191. }
  192. catch(NullReferenceException)
  193. {
  194. strValue="";
  195. }
  196. //如果Session中不存在,从Request中寻找。
  197. if (ValidateUtil.isBlank(strValue))
  198. {
  199. try
  200. {
  201. strValue=oRequest[paraName].ToString();
  202. }
  203. catch(NullReferenceException)
  204. {
  205. strValue="";
  206. }
  207. //均为空时,返回空字符串。
  208. if (ValidateUtil.isBlank(strValue))
  209. strValue="";
  210. }
  211. return strValue;
  212. }
  213. /// <summary>
  214. /// 获取页面参数的值
  215. /// </summary>
  216. /// <param name="paraName">参数名称</param>
  217. /// <returns>参数值,字符串形式</returns>
  218. public string GetParaValue(string paraName)
  219. {
  220. return GetParaValue(Session,Request,paraName); 
  221. }
  222. #endregion
  223. #region 事件处理
  224. protected override void OnInit(EventArgs e)
  225. {
  226. base.OnInit(e);
  227. this.Load += new System.EventHandler(this.PageBase_Load);
  228. this.Error += new System.EventHandler(this.PageBase_Error);
  229. }
  230. protected void LogEvent(string message, EventLogEntryType entryType)
  231. {
  232. //EventLog提供与Windows事件日志的交互
  233. //如果事件源hotop100没有在计算机中注册,则创建事件源
  234. if (!EventLog.SourceExists("hotop100"))
  235. {
  236. EventLog.CreateEventSource("hotop100", "Application");
  237. }
  238. //将错误日志信息写入Windows事件日志中
  239. EventLog.WriteEntry("hotop100", message, entryType);
  240. }
  241. protected void PageBase_Error(object sender, System.EventArgs e)
  242. {
  243. string errMsg;
  244. //得到系统上一个异常
  245. Exception currentError = Server.GetLastError();
  246. errMsg = "<link rel="stylesheet" href="/default.css">";
  247. errMsg += "<h1>页面错误</h1><hr/>此页面发现一个意外错,对此我们非常抱歉。"+
  248. "此错误消息已信息了系统管理员,请及时联系我们,我们会及时解决此问题! <br/>" +
  249. "错误发生位置: "+Request.Url.ToString()+"<br/>"+
  250. "错误消息: <font class="ErrorMessage">"+ currentError.Message.ToString() + "</font><hr/>"+
  251. "<b>Stack Trace:</b><br/>"+
  252. currentError.ToString();
  253. //如果发生致命应用程序错误
  254. if ( !(currentError is ApplicationException) )
  255. {
  256. //向Windows事件日志中写入错误日志
  257. LogEvent( currentError.ToString(), EventLogEntryType.Error );
  258. }
  259. //在页面中显示错误
  260. Response.Write( errMsg );
  261. //清除异常
  262. Server.ClearError();
  263. }
  264. private void PageBase_Load(object sender, System.EventArgs e)
  265. {
  266. }
  267. #endregion
  268. }
  269. }