刚刚学了几天的MVC框架自己也试着做了一个留言本的示例小程序,初步的了解了一下MVC框架的功能。通过这个示例了解了MVC框架中的几个有用的东西。
刚刚学了几天的MVC框架自己也试着做了一个留言本的示例小程序,初步的了解了一下MVC框架的功能。通过这个示例了解了MVC框架中的几个有用的东西。
1、HandleErrorAttribute(MVC框架内置的页面错误处理Filter)
这个内置的处理错误的功能很简单,只能在当页面出现错误的时候把错误信息收集起来,并显示友好的错误提示的View(需要在web.congfig中配置是否启用友好错误提示的customErrors节点)。在用ASP.NET MVC 框架模板创建web应用程序时会自动生成一个\Shared\Error.aspx的View。但是这个默认的错误处理功能没有实现对错误日志的记录,所以我们可以通过继承HandleErrorAttribute,来实现自己的MyHandleError。
MyHandleError
1 public class MyHandleError : HandleErrorAttribute
2 {
3 //重写错误处理方法
4 public override void OnException(ExceptionContext filterContext)
5 {
6 //记录错误日志
7 this.AddLog(filterContext);
8 //调用基类的错误处理功能
9 base.OnException(filterContext);
10 }
11
12 public void AddLog(ExceptionContext filterContext)
13 {
14 DirectoryInfo objDirectory = new DirectoryInfo(filterContext.HttpContext.Server.MapPath("~/Log"));
15 if (!objDirectory.Exists)
16 {
17 objDirectory.Create();
18 }
19 string _logFile = DateTime.Now.ToString("yyyyMM") + ".log";
20 string _logFullName = Path.Combine(objDirectory.FullName, _logFile);
21 if (!File.Exists(_logFullName))
22 {
23 FileStream fs = File.Create(_logFullName);
24 fs.Close();
25 }
26
27 using (StreamWriter sw = new StreamWriter(new FileStream(_logFullName, FileMode.Append, FileAccess.Write)))
28 {
29 sw.WriteLine(DateTime.Now.ToString() + "\t" + filterContext.Exception.Message);
30 sw.WriteLine("StackTrace:" + filterContext.Exception.StackTrace);
31 }
32 }
33 }
34
当然我们还可以近一部增强这一部分的处理功能,比如将错误信息格式化的存入到一个xml文件中或者数据库中,这样我们就可以实现更多对错误日志进行分析和处理的方法了。
2、IModelBinder(对复杂类型的内置模型绑定器接口)
通过实现这个接口我可以在提交表单的时候用,这样的代码来接收我们提交过来的数据,如:
public ActionResult UserSave(User objUser)
这个接口就相当于实现了一个由表单数据到业务对象数据的一个转换。这样可以使得Controller中的代码更简洁更清晰。
UserBinder
public class UserBinder : IModelBinder
{
public ModelBinderResult BindModel(ModelBindingContext bindingContext)
{
User objUser = new User();
var form = bindingContext.HttpContext.Request.Form;
objUser.UserID = Convert.ToInt32(form["UserID"]);
objUser.Username = form["Username"];
objUser.Email = form["Email"];
objUser.Password = FormsAuthentication.HashPasswordForStoringInConfigFile(form["Password"], "sha1");
objUser.CreatedDate = DateTime.Now;
ModelBinderResult objR = new ModelBinderResult(objUser);
return objR;
}
}
要使用这个绑定器,我们就需要先注册它,关于如何注册和更详细的使用方法可以看这篇文章的内容。
3、Html.DropDownList(用于生成select的辅助方法)
该方法一个重要的参数就是SelectList,它相当于DropDownList的数据源。我们可以指定这个DropDownList的value和text还可以指定他的当前选中项,如:
定义一个SelectList
protected SelectList PageArray
{
get
{
ArrayList arr = new ArrayList();
for (int i = 1; i <= PageCount; i++)
{
arr.Add(new { text = string.Format("第{0}页", i), value = i });
}
return new SelectList(arr, "value", "text", this.PageIndex);
}
}
我们在前台页面上就可以这样引用<%=Html.DropDownList("Page", this.PageArray)%>
以上所有代码都是基于ASP.NET MVC Beta版的,目前示例代码还不完善,没有权限判断上的内容,以后有心得后再继续完善。
点击这里可以下载本示例代码。