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. Web方式预览Office/Word/Excel/pdf文件解决方案

    最近在做项目时需要在Web端预览一些Office文件,经过在万能的互联网上一番搜索确定并解决了. 虽然其中碰到的一些问题已经通过搜索和自己研究解决了,但是觉得有必要将整个过程记录下来,以方便自己以后查 ...

  2. 解读2015年互联网UGC内容发展态势,安全事件频发

    <2015内容安全年报> 阿里移动安全 第一章 2015年内容安全形势 随着互联网业务的迅速发展,互联网上的信息内容带来了爆炸式的增长.由于缺乏对网络活动进行有效监督和管理的措施,致使互联 ...

  3. Windows环境安装Linux系统及JDK部署

    前言 由于我的笔记本有点问题,所以这周系统包括所有硬盘全部重装了,原来的Linux虚拟机都没了,因此才有了这篇文章和各位朋友们分享. 由于Linux环境的优越性(开源.低成本.安全性好.网络功能强大) ...

  4. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例 ...

  5. innerHTML,outerHTML,innerText,outerText区别以及insertAdjacentHTML()方法

    在需要给文档插入大量的新的HTML标记的情况下,通过多次DOM操作先创建节点再指定它们之间的关系会非常麻烦而且效率不高,相对而言插入标记的方法会更加简单,速度也更快. 插入标记中有这四个属性inner ...

  6. 《Node即学即用》—— 读后总结

    导图

  7. 携程App的网络性能优化实践

    首先介绍一下携程App的网络服务架构.由于携程业务众多,开发资源导致无法全部使用Native来实现业务逻辑,因此有相当一部分频道基于Hybrid实现.网络通讯属于基础&业务框架层中基础设施的一 ...

  8. 使用angular中ng-repeat , track by的用处

    我们见到最简单的例子是: <div ng-repeat="link in links" ></div> 如果item的值有重复的,比如links=[&quo ...

  9. PHP面向对象笔记

    一.构造函数.析构函数(1)构造函数:__construct()说明:对象被实例化时调用,可带参数例: $obj = new A($a,$b); (2)析构函数:_destruct()说明:页面执行结 ...

  10. sql的行转列(PIVOT)与列转行(UNPIVOT)

    在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测 ...