就连我们自己开始时也在问自己:我们为什么要开发一套MVC,微软的难道不可用用吗?
一开始的理由很简单.为了更好地跨平台部署;在Linux部署过.NET的人们应该知道,
部署起来是有点繁琐的.自己试试就知道了:
文件名问题、版本问题、兼容问题................
但当我们仔细思考后发现了有些东西势在必行.
1)我们需要更好的跨平台框架
正如概述里提到的,微软的MVC不能够直接提供支持..从开发的角度来看你的开发环境需要重新配置一番,你的服务器运行环境同样需要
繁琐的配置.而我们需要的效果很直接:一套代码无论是在IDE中还是在IIS或Linux Web服务器上都能无缝运行.
简单来讲,代码搬过去搬过来都能很好调试、运行、无需繁琐的配置.
而微软的MVC始终在为其Windows Server考虑.
2)我们需要更优秀的MVC编程理念及测试环境.
我们先看一段MVC的代码
public ActionResult GetStudent(int id) { Student st = new Student(); st.Email = "[email protected]"; st.Name = "秦时明月" + DateTime.Now.ToShortDateString(); st.Password = "pwd"; st.PID = 23; st.Birth = DateTime.Now.AddYears(-10); st.Fa = new Father(); st.Fa.Age = 90; st.Fa.Name = "Father1"; st.Fa.Mother = new Mother() { Name = "mm", Age = 1002 }; return View(st); }
现在我们提出两个疑问:
1. 如果上面的业务功能我需要在其他代码中使用怎么办?比如:我有一个查询功能就是这样的模式.----代码重用率
2.如果我要对这段代码进行自动化测试怎么办?或许你有好方法----但这是一个问题.
假如,MVC的Action 为以下代码,那么所有的问题就不是问题了.
public Student GetStudent(int id) { Student st = new Student(); st.Email = "[email protected]"; st.Name = "秦时明月<>" + DateTime.Now.ToShortDateString(); st.Password = "pwd"; st.PID = 23; st.Birth = DateTime.Now.AddYears(-10); st.Fa = new Father(); st.Fa.Age = 90; st.Fa.Name = "Father1"; st.Fa.Mother = new Mother() { Name = "mm", Age = 1002 }; return st; }
以上仅仅是一个引子.还有很多其他类似问题,我们以后再讨论.
3)我们要更好的Debug环境
当然你说你可以把微软的MVC源代码拿进来做调试,
但我也可以问你:你在一刻钟之内能够将其集成到你的项目中进行调试吗?
3.项目截图
<%=Html.TextBoxFor(m => m.Name) %><br /> <%=Html.TextBoxFor(m => m.Password) %><br /> <%=Html.TextBoxFor(m => m.PID) %><br /> <%=Html.TextBoxFor(m => m.Birth) %><br /> <%=Html.TextBoxFor(m => m.Fa.Name) %><br /> <%=Html.TextBoxFor(m => m.Fa.Mother.Name) %><br /> <%=Html.TextBoxFor(m => m.Fa.Mother.Age) %><br />
从dll包里面引用
1.引用Moon.Web,(Moon.Orm,FluentValidation 可以不引用)
2.配置web.config的page节点.
<pages pageParserFilterType="Moon.Web.ViewTypeParserFilter, Moon.Web" pageBaseType="Moon.Web.MViewPage,Moon.Web" enableViewState="false" enableViewStateMac="false" autoEventWireup="false" > <namespaces> <add namespace="Moon.Web" /> </namespaces> </pages>
3.配置handler
1)若集成模式.(现在WINDOWS SERVER基本上都用集成模式) configuration节点下直接使用如下配置
<system.webServer> <handlers> <add name="RequestHandler" path="*.htm" verb="*" type="Moon.Web.RequestHandler, Moon.Web" /> </handlers> </system.webServer>
2)若经典模式(老版本IIS,包括xsp4 mono)
<configuration>
<system.web> 下配置.
<httpHandlers> <add path="*.htm" verb="*" type="Moon.Web.RequestHandler, Moon.Web" /> </httpHandlers>
4.添加文件夹
在项目根目录下添加
Controllers文件夹(非必须)
Views文件夹
如上面项目结构图所示.
5.创建Controller
如下所示,继承BaseController即可.
然后在global文件中注册路由
6.创建视图