asp.net实现非常实用的自定义页面基类(附源码)(3)

protected void btnSet_Click(object sender, EventArgs e) { Employee employee = (Employee)this.GetFormData(typeof(Employee)); StringBuilder sb = new StringBuilder(); sb.Append("登录名:" + employee.UserName + "<br/>"); sb.Append("真实姓名:" + employee.RealName + "<br/>"); sb.Append("所在地:" + employee.Address + "<br/>"); sb.Append("是否离职:" + employee.IsLeave + "<br/>"); sb.Append("在职状态:" + employee.State + "<br/>"); this.ltrContext.Text = sb.ToString(); }

总结:

(1)、对于页面中控件较多的情况,这个类里的反射取值和赋值的方法还是很有用的(比较恶心的是你要哼唧哼唧地对照实体类给页面控件命名。kao,实体类有代码生成器自动生成我就忍了,页面控件还要一一对应地命名,估计很多程序员在这方面没少花时间,还有就是不考虑反射对性能的影响)。不过从代码的简洁程度来看,这个确实显得out了;不过呢,笔者习惯了,命名多就多一些吧,在找到稳定可靠的解决方案之前,短时间看来是不会选择改进的了;
(2)、如果页面中有用户控件(UserControl),用户控件里的子控件直接在页面中就比较难取到了(你可能已经看出问题的端倪来了),解决的方法就是在用户控件里生成实体类(这个可以模仿BasePage写一个BaseControl类,让用户控件继承BaseControl,然后取值。本来想另开一篇介绍一下的,可是发现实现代码雷同,放弃);
(3)、取消页面文本框的enter key您可以参考《asp.net实现取消页面表单内文本输入框Enter响应的方法》;
(4)、异常处理见(二)。

二、异常处理

1、日志类(自己写的一个简单通用的文本日志处理类)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Web; namespace DotNet.Common.WebForm { /// <summary> /// 日志类(常用的都是log4net,这里简陋地实现一个写入文本日志类) /// </summary> public static class LogUtil { /// <summary> /// 写入异常日志 /// </summary> /// <param></param> public static void WriteFileLog(string exMsg) { string path = HttpContext.Current.Request.PhysicalApplicationPath + "LogFile"; FileStream fs = null; StreamWriter m_streamWriter = null; try { if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } path = path + "\\" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); m_streamWriter = new StreamWriter(fs); m_streamWriter.BaseStream.Seek(0, SeekOrigin.End); m_streamWriter.WriteLine(DateTime.Now.ToString() + "\n"); m_streamWriter.WriteLine("-----------------------------------------------------------"); m_streamWriter.WriteLine("-----------------------------------------------------------"); m_streamWriter.WriteLine(exMsg); m_streamWriter.WriteLine("-----------------------------------------------------------"); m_streamWriter.WriteLine("-----------------------------------------------------------"); m_streamWriter.Flush(); } finally { if (m_streamWriter != null) { m_streamWriter.Close(); } if (fs != null) { fs.Close(); } } } } }

2、Error.aspx

这个比较无语。通常用来提供一个有好的出错页面。对于开发人员,建议显示完整的异常信息。

下面贴一个对开发人员有帮助的页面:

(1)、设计页面

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Error.aspx.cs" Inherits="Error" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>出错啦</title> </head> <body> <form runat="server"> <div> <table> <tr> <td colspan="2"> <b>Error on page</b> </td> </tr> <tr> <td> <b>stackTrace :</b> </td> <td> <asp:Label runat="server"></asp:Label> </td> </tr> <tr> <td> <b>Error message :</b> </td> <td> <asp:Label runat="server"></asp:Label> </td> </tr> <tr> <td> <b>Source :</b> </td> <td> <asp:Label runat="server"></asp:Label> </td> </tr> <tr> <td> <b>TargetSite :</b> </td> <td> <asp:Label runat="server"></asp:Label> </td> </tr> </table> </div> </form> </body> </html>

(2)、实现代码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwfyp.html