为Linux重新开发MVC,有图有真相
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,有图有真相的更多相关文章
- 为.NET搭建Linux的开发环境,鄙视那些将简单事情复杂化的人
写在前面的吐槽 原本跨平台开发很容易的事情, 很多人把它弄得很麻烦,给外人的感觉:你们.NET跨平台开发好不成熟,好麻烦哦. ..................................... ...
- Core开发-MVC 使用dotnet 命令创建Controller和View
NET Core开发-MVC 使用dotnet 命令创建Controller和View 使用dotnet 命令在ASP.NET Core MVC 中创建Controller和View,之前讲解过使 ...
- 关于linux asp.net MVC网站中 httpHandlers配置无效的处理方法
近期有Jexus用户反映,在Linux ASP.NET MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404( ...
- 驱动开发学习笔记. 0.06 嵌入式linux视频开发之预备知识
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB v ...
- 如何参与Linux内核开发(转)
本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any ...
- 嵌入式Linux驱动开发日记
嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...
- 嵌入式linux应用开发完全手册学习笔记一
2015.3.25星期三 晴 有两个星期没写学习日记了,找个时间把这段时间做的电子词典和ARM小项目总结一下. 下面的知识点总结,U-BOOT:参考PDF文档:嵌入式linux应用开发完全手册 当虚拟 ...
- 专访Linux嵌入式开发韦东山操作系统图书作者--转
CSDN学院讲师韦东山:悦己之作,方能悦人 发表于2015-04-28 08:09| 6669次阅读| 来源CSDN| 24 条评论| 作者夏梦竹 专访Linux嵌入式开发韦东山操作系统图书作者 摘要 ...
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
随机推荐
- 浏览器访问Servlet
浏览器访问Servlet1.指定一个Servlet路径( 在web.xml : <servlet> ...
- NodeJS写个爬虫,把文章放到kindle中阅读
这两天看了好几篇不错的文章,有的时候想把好的文章 down 下来放到 kindle 上看,便写了个爬虫脚本,因为最近都在搞 node,所以就很自然的选择 node 来爬咯- 本文地址:http://w ...
- 辛巴学院-Unity-剑英陪你零基础学c#系列(二)顺序
这不是草稿 辛巴学院:正大光明的不务正业. 上一次的教程写出来之后,反馈还是挺多的,有很多都做了修改,也有一些让人崩溃,不得不说上几句.有些人有些很奇怪的地方,你写篇东西,被看了以后不说他感觉怎么 ...
- [nodemon] Internal watch failed: watch ENOSPC错误解决办法
运行环境:Ubuntu 16.04, WebStorm 2016.1.3, node.js v0.12.5, nodemon 1.9.2 在WS自带的终端输入nodemon server.js启动项目 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (23) -----第五章 加载实体和导航属性之预先加载与Find()方法
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-2 预先加载关联实体 问题 你想在一次数据交互中加载一个实体和与它相关联实体. ...
- 2013 duilib入门简明教程 -- 简单控件介绍 (12)
前面的教程应该让大家对duilib的整体有所映像了,下面就来介绍下duilib具体控件的使用. 由于官方没有提供默认的控件样式,所以我就尽量使用win7或者XP自带的按钮样式了,虽然界 ...
- CSS3盒模型display:box;box-flex:3;
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- HTML5新增标签与属性
目录 一.HTML5新增属性 1.1.contextmenu 1.2.contentEditable 1.3.hidden 1.4.draggable 1.5.data-* 1.6.placehold ...
- Trace Flag
Trace Flag能够影响Sql Server的行为,主要用于diagnose performance issue,官方解释是: Trace flags are used to temporaril ...
- OpenCASCADE Gauss Integration
OpenCASCADE Gauss Integration eryar@163.com Abstract. Numerical integration is the approximate compu ...