【ASP.NET自己写MVC框架】2、初步实现MVC的Controler和View
来源:互联网 发布:2个月瘦10斤 知乎 编辑:程序博客网 时间:2024/05/21 14:57
我们已经截获了浏览器的do请求,并可以自己处理。接下来,怎样根据不同的do请求,执行不同的任务呢?微软的做法是在website:Global.asax中设置类似路由的功能。这里提供另外一种思路:xml配置。
website根目录下新建FxConfig文件夹,添加一个FxConfig.xml文件:
一眼就可以看出这样配置是什么意思
让FxHttpHandler接到square请求后,MySite.Actions.SquareAct类(的某个方法),这个类在MySite程序集dll中,执行完成后,目标页面是Result.aspx;不幸出错则跳到ErrorPage.aspx。
改造FxHttpHandler.ProcessRequest(HttpContext context):
1.把配置文件读进内存。(不能每次请求都读一次啊,以后改进)
2.得到请求的Action名。
context.Request.Url.AbsolutePath =》*/square.do
action名就从路径中得到咧:square
3.于是知道了应该执行MySite.Actions.SquareAct中的某个方法(统一定义为Excute()),反射之。
4.如何确定执行成功与否呢?约定Excute()成功返回true,否则返回false。
5.根据执行结果跳转到FxAction配置的页面去。
-----------------------------------------
a.为了集中管理数据,把页面传来的数据放进一个Hashtable中:
b.SquareAct实例化后,强转成Action类,执行Excute方法,需要定义Action的父类,且有一个虚方法Excute():
这个方法解释一个Hashtable参数,其中放置页面传来的数据供Action操作,处理完成后,结果还放在里面送回页面去。
于是乎,现在这个Controler已经可以根据配置灵活干活了。
3. 在不同的页面都要取出exeData显示其中的数据,那么可以定义一个页面基类,方便子页面使用数据。FxMVC.View.FxPage:System.Web.Page,并提供一个属性:
于是乎,View部分也有雏形了。
/*=====Result.aspx=============*/
<%@ Page Language="C#" Inherits="FxMVC.Views.FxBasePage" %>
计算结果:<%=ViewData["number2"] %>
/*=====ErrorPage.aspx=============*/
<%@ Page Language="C#" Inherits="FxMVC.Views.FxBasePage" %>
出错了:<%=ViewData["fx_errorMessage"] %>
出一口气休息一下,思路更加明确了。当然现在还是有很多需要改进的地方,比如
1、每次请求都去读一次配置文件(可:继承IHttpModule,在程序启动时只读一次,缓存起来);
2、action的配置需要进一步完善,以实现更强大的功能和更灵活的控制。
3、反射后的实际执行类,也应该缓存起来,毕竟每次请求都反射的话,很累机器的。
下回分解。
- 【ASP.NET自己写MVC框架】2、初步实现MVC的Controler和View
- 写自己的ASP.NET MVC框架
- 写自己的ASP.NET MVC框架
- 写自己的ASP.NET MVC框架(上)
- 写自己的ASP.NET MVC框架(下)
- 写自己的ASP.NET MVC框架(上)
- 写自己的ASP.NET MVC框架(上)
- 写自己的ASP.NET MVC框架(下)
- Asp.Net中实现自己的Mvc开发框架
- 用ASP.NET MVC自己管理自己的View:ASP.NET MVC File Management
- 用ASP.NET MVC自己管理自己的View:ASP.NET MVC File Management
- 自己实现Asp.NET MVC
- 好文章——写自己的ASP.NET MVC框架(上)
- asp.net MVC实现view 和control分离
- ASP.NET的 MVC框架
- ASP.NET的MVC框架
- asp.net mvc - 自定义的view引擎和ioc集成
- mvc 一个controler 多个view
- 【ASP.NET自己动手写MVC框架】 1、从截获http请求开始
- 关于servlet init parameters 与 context init parameters的区别
- 仿函数使用要领
- C++回调函数(callback)与仿函数(functor)的异同
- 独立Discuz头像编辑模块
- 【ASP.NET自己写MVC框架】2、初步实现MVC的Controler和View
- error: ‘exit’ was not declared in this scope
- 查看源码
- SRM507div2
- 5个IO口扫描25个按键的解决方法
- 高效的面试方式:结对编程
- NandFlash相关文章网址
- 虾米电台+SOSO音乐+奇艺影视+在线图片处理+快递查询
- 自己制作数字证