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 = ;
st.Birth = DateTime.Now.AddYears(-);
st.Fa = new Father();
st.Fa.Age = ;
st.Fa.Name = "Father1";
st.Fa.Mother = new Mother() { Name = "mm", Age = };
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 = ;
st.Birth = DateTime.Now.AddYears(-);
st.Fa = new Father();
st.Fa.Age = ;
st.Fa.Name = "Father1";
st.Fa.Mother = new Mother() { Name = "mm", Age = };
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.创建视图

为Linux重新开发MVC,有图有真相的更多相关文章

  1. 为.NET搭建Linux的开发环境,鄙视那些将简单事情复杂化的人

    写在前面的吐槽 原本跨平台开发很容易的事情, 很多人把它弄得很麻烦,给外人的感觉:你们.NET跨平台开发好不成熟,好麻烦哦. ..................................... ...

  2. Core开发-MVC 使用dotnet 命令创建Controller和View

    NET Core开发-MVC 使用dotnet 命令创建Controller和View   使用dotnet 命令在ASP.NET Core MVC 中创建Controller和View,之前讲解过使 ...

  3. 关于linux asp.net MVC网站中 httpHandlers配置无效的处理方法

    近期有Jexus用户反映,在Linux ASP.NET MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404( ...

  4. 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识

    驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...

  5. 如何参与Linux内核开发(转)

    本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any ...

  6. 嵌入式Linux驱动开发日记

    嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...

  7. 嵌入式linux应用开发完全手册学习笔记一

    2015.3.25星期三 晴 有两个星期没写学习日记了,找个时间把这段时间做的电子词典和ARM小项目总结一下. 下面的知识点总结,U-BOOT:参考PDF文档:嵌入式linux应用开发完全手册 当虚拟 ...

  8. 专访Linux嵌入式开发韦东山操作系统图书作者--转

    CSDN学院讲师韦东山:悦己之作,方能悦人 发表于2015-04-28 08:09| 6669次阅读| 来源CSDN| 24 条评论| 作者夏梦竹 专访Linux嵌入式开发韦东山操作系统图书作者 摘要 ...

  9. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

随机推荐

  1. Java中有关Null的9件事

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...

  2. python1

    leetcode上面的很简单的题目 Given an integer (signed 32 bits), write a function to check whether it is a power ...

  3. 初涉深度优先搜索--Java学习笔记(二)

    版权声明: 本文由Faye_Zuo发布于http://www.cnblogs.com/zuofeiyi/, 本文可以被全部的转载或者部分使用,但请注明出处. 上周学习了数组和链表,有点基础了解以后,这 ...

  4. FlexiGrid 使用 全选、自动绑定

    1.介绍 Flexigrid是一个类似于Ext Gird,但基于jQuery开发的Grid.它具有的功能包括:可以调整列宽,合并列标题,分页,排序,显示/隐藏表格等.Flexigrid显示的数据能够通 ...

  5. 如何解决audiodg占用内存高(停止与重启audiodg服务)

    window7电脑audiodg.exe进程占用内存很高 首先想到的办法是结束该进程,于是在任务管理器里结束进程后,内存是释放了,但是发现发现电脑没有声音 去到电脑的system32目录下双击audi ...

  6. UML类图的6大关系

    <小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...

  7. NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例

    一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...

  8. 使用GDB调试Go语言

    用Go语言已经有一段时间了,总结一下如何用GDB来调试它! ps:网上有很多文章都有描述,但是都不是很全面,这里将那些方法汇总一下 GDB简介  GDB是GNU开源组织发布的⼀一个强⼤大的UNIX下的 ...

  9. [译]libev和libevent的设计差异

    本文译自what's the difference between libev and libevent? 作者是libev作者 [问]两个库都是为异步io调度而设计,在Linux上都是使用epoll ...

  10. XE1:使用SSMS创建Extended Events

    Extended Events 用于取代SQL trace,是SQL Server 追踪系统运行的神器,其创建过程十分简单. 一,创建Extended Events的Session step1,打开N ...