1.寫在前面
就連我們自己開始時也在問自己:我們為什么要開發一套MVC,微軟的難道不可用用嗎?
一開始的理由很簡單.為了更好地跨平台部署;在Linux部署過.NET的人們應該知道,
部署起來是有點繁瑣的.自己試試就知道了:
文件名問題、版本問題、兼容問題................
但當我們仔細思考后發現了有些東西勢在必行.
2.我們的原因
1)我們需要更好的跨平台框架
正如概述里提到的,微軟的MVC不能夠直接提供支持..從開發的角度來看你的開發環境需要重新配置一番,你的服務器運行環境同樣需要
繁瑣的配置.而我們需要的效果很直接:一套代碼無論是在IDE中還是在IIS或Linux Web服務器上都能無縫運行.
簡單來講,代碼搬過去搬過來都能很好調試、運行、無需繁瑣的配置.
而微軟的MVC始終在為其Windows Server考慮.
2)我們需要更優秀的MVC編程理念及測試環境.
我們先看一段MVC的代碼
public ActionResult GetStudent(int id) { Student st = new Student(); st.Email = "q@q.com"; 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 = "q@q.com"; 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 />
4.配置過程.
從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.創建視圖