尝鲜Jumony for MVC,体验插件化网站开发

news/2024/5/10 2:25:43/文章来源:https://blog.csdn.net/weixin_33691700/article/details/93922546

Jumony for MVC是这一年来Jumony项目的重头戏,Jumony for MVC是Jumony技术与ASP.NET MVC的结合,尽管现在Jumony for MVC还未发布稳定版本,但确实是非常值得一试的一个视图引擎。希望这篇文章能给大家带来眼前一亮的感觉。

在“用网站(WebSite而不是WebProject)项目构建ASP.NET MVC网站”文章中,我已经说明了如何在网站项目上搭建MVC框架,那么这一次,我同样在网站项目上搭建Jumony for MVC。如果您已经安装了NuGet,这一切将变得非常简单,如果还没有,那么可以到NuGet的官方网站(http://www.nuget.org/)上下载,或者通过VS2010的扩展管理器直接搜索安装。由于Jumony for MVC要求.NET 4.0的环境,所以这一篇文章将基于VS2010 + .NET Framework 4.0 + NuGet等这些高科技武器来介绍,如果你缺乏其中的任何一样,说明你该升级你的装备了。

关于NuGet的使用,博客园也有很多文章介绍,例如dudu的这篇:http://www.cnblogs.com/dudu/archive/2011/07/15/nuget.html。在这篇文章中,我假定大家了解NuGet的基本用法,其实NuGet用起来很简单的。

一、安装Jumony for MVC

废话不多说,首先,当然还是要建立一个解决方案。然后,新建一个空白的网站:

image

掏空web.config中多余的设置:

image

然后通过NuGet安装Jumony for MVC的预览版。首先在网站上点击右键,选择Manage NuGet Packages

image

在搜索框中输入Jumony,然后选择Jumony for MVC,点击旁边的Install按钮

image

当跳出许可协议时,选择Accept(Jumony采用LGPL协议发布)。然后NuGet就会开始下载Jumony for MVC的预览版,同时安装到网站中。

安装完毕后网站应该是这样的:

image

同时web.config文件会被修改,添加大量配置,这些配置已经足够在网站项目运行MVC框架了。

 

二、准备Controller

然后我们开始来构建我们的第一个Controller,这一次我们尝试用一个独立的项目来承载Controller,这是插件化的第一步。那么新建一个项目,我命名为Demo.Test,这个项目仅仅用来测试我们的环境:

image

为这个项目添加System.Web.Mvc的引用,这里可能要特别注意版本,Jumony for MVC默认是使用MVC2的,所以这里也添加MVC2的引用。

当然你也可以修改web.config中的MVC程序集的版本。要确保你的Controller项目所引用MVC的版本和网站所引用的一致,否则就要添加MVC版本兼容的配置了,我在这里不详述。就用MVC2来做示范。

添加引用后,就可以删除默认的cs文件,添加一个Controller,我命名为TestController,然后往里面随便塞一个Action,像这样:

 

OK,接下来是配置路由,如果路由都在global.asax中配置,那是多么没有创意的事情,而且,这会造成所有的功能都要到那边去配置一下,不利于我们所追求的插件化。所以,这一次我在Controller程序集里面配置路由,这样,只要这个程序集的DLL放在了网站的bin文件夹,那么路由就自动被配置了,是不是很酷呢?这么酷的功能利用ASP.NET 4的新特性其实非常好实现。首先我们要添加System.Web程序集的引用,然后添加如下代码:

 

注意PreApplicationStartMethod这个特性要注册在程序集范畴(assembly),所以除了在前面要加上assembly:之外,还需要放到namespace块的外面去。

通过这样的代码,我们就能确保在网站应用程序启动前执行RegisterRouting这个方法了,所以,我们可以在这里添加路由注册的代码。不过在这里,我要向大家介绍一下Jumony for MVC提供的一个MVC框架改善,简单路由表(SimpleRoutingTable)。

首先,通过同样的方法,利用NuGet为这个项目添加Jumony for MVC的引用。然后引用Jumony for MVC的命名空间Ivony.Html.Web.Mvc,最后在RegisterRouting方法中注册一个路由:

 

简单路由表的实例总是可以通过MvcEnvironment静态类型来获取,通过同样的手法,Jumony for MVC会自动为系统注册简单路由表为一个路由服务。在这里简单说一下简单路由表相对于ASP.NET Routing默认实现的一部分改善。

  1. 首先是简单路由表没有RouteTable的先到先得的原则,在简单路由表中的路由规则遵循的是谁更适合就选谁的原则,这更符合使用者的直觉。也使得我们可以把路由规则注册分散到各个项目,即使这些路由规则被注册的时间不可控。(这可是插件化的关键问题之一)
  2. 由于简单路由表遵循的是谁更适合的原则,所以简单路由表不允许注册存在冲突的路由规则,这样更不容易犯错。
  3. 简单路由表取消了复杂的概念,像上面那个路由规则,其实非常简单,就是在"~/"这个虚拟路径和{ controller: Test, action: Test }之间建立一个对应的关系。取消了默认值和有效值的概念,尽管牺牲了灵活性,但提高了对URL的可控性。不会产生令人惊讶的结果。

简单路由表事实上只是RouteBase的一个实现(也就是一个路由),所以尽管通过简单路由表注册的路由规则没有先到先得的规则,但简单路由表与其他RouteBase实现一起在RouteTable中仍然遵循ASP.NET框架所设定的先到先得规则。关于这一点,我在后面的系列文章中再详细的讨论简单路由表。

最终的代码像这样:

 

三、配置视图

Controller和路由都已经配置完毕,现在回到网站,我们为网站添加刚刚Demo.Test项目的引用:

image

然后生成网站,运行之,检查我们的路由和Controller是否正常运行。(记得一定要先生成网站,这样我们的Demo.Test才会被编译为DLL并放到bin文件夹)。

image

如果您看到的是这个界面,就说明已经成功了。细心的您可能已经发现,查找路径中已然包含了html文件的查找,这就是JumonyViewEngine被注册的结果。这一切都是通过同样的手法(PreApplicationStartMethod特性)在悄声无息中完成的。

那么接下来就是弄一个视图出来,我比较习惯把所有视图页面都放在Views目录下,不要带上Controller名字的文件夹,所以我弄了一个index.html文件放在Views文件夹下:

image

内容就像这样子:

 

因为不是放在指定的位置,所以我们需要修改一下JumonyViewEngine的设置,打开global.asax文件,修改为下面这样:

 

要搜索多个路径,可以在数组中多添加几个路径模版。当修改完了后,再次打开网站应该是这样了:

image

四、留言板

当然这个网站毫无意义,我们做个有意义的东西,留言板,只包含两个功能添加留言和浏览留言的留言板(尽管还是没啥意义,但是Demo,大家总不能让我弄个论坛来做示范)。

以前做网站都是需要先出来页面,程序才开始动手,那么这一次,我们可以先不要管页面,先构建留言板的功能实现,即Controller实现。

同样的,我新建了一个独立的项目:Demo.MessageController,添加引用创建Controller的过程和之前一样,在此不再赘述,最终实现的Controller像这样:

 

两个Action,简单明了,为了避免配置数据库等麻烦事儿,这里直接用文件系统担任了数据库,所有的留言都以文本文件保存了下来。然后我们为网站添加这个功能,也就是让网站项目引用这个 Controller所在的项目。

然后要为这个留言板提供一个视图,在List这个Action中,已经显示指定了视图的名称,Message_List。所以我在Views文件夹添加了这样一个HTML文件:

image

内容如下:

 

注意form标签里面的属性,这样写的意思就是,提交到相同Controller的名为Add的Action去。这就是Jumony视图引擎,自然流畅。由于action本来就是标准form元素的一个属性,所以加一个controller强调不是提交到Add这个URL,controller不设置值,则会从当前上下文继承。

接下来我们在那个测试首页添加一个链接,让我们可以访问到留言板的页面:

 

<a>标签中的action和controller就不解释了,这时候再打开网站,看到的应该是这样的效果:

image

点击链接就可以到达留言板:

image

我们可以随便留言,但提交后,页面一闪而过,还是老样子。这是因为我们还没有为留言板页面绑定留言数据。

Jumony现阶段对这种简单重复N次的工作并不比WebForm或是Razor好,所以我决定将绑定数据外包给WebForm来做,顺便也可以看看Jumony for MVC是如何与其他视图引擎无缝兼容的。

WebFormViewEngine的视图查找逻辑也是可以修改的,但比较麻烦,所以这一次我决定按照他的规则,新建一个Shared文件夹,在下面创建一个部分视图。

image

如何在网站创建WebFormViewEngine的视图已经在上一篇文章中探讨过,主要就是设置Inherits属性,作为用户控件(部分视图),应从ViewUserControl继承,以下是部分视图完整代码:

 

当然,如果用Razor,这里的代码能够更为简洁和优雅。

接下来是如何将这个部分视图拼合到Jumony视图引擎的html视图中去,其实也非常简单,使用partial标签,将原来的<div class="message"></div>修改为这样:

 

重新打开留言板看看,应该可以看到留言了:

image

 

Jumony for MVC,值得您关注。。。。。

http://jumony.codeplex.com/

转载于:https://www.cnblogs.com/Ivony/archive/2011/11/03/2233847.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_769827.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站设计常用技巧收集(转)

原链接&#xff1a;http://www.cnblogs.com/sufei/archive/2011/11/30/2268709.html 先说一下写这篇文章的目的吧&#xff0c;这上面的东西很多不是我写的&#xff0c;也不是我总结的&#xff0c;这点我肯定&#xff0c;呵呵&#xff0c;我希望大家也能提提你自己的建议&#x…

easyui中文api网站

2019独角兽企业重金招聘Python工程师标准>>> http://easydoc.cloudfoundry.com/doc/easyui/1.2.5/ easyui中文api网站 转载于:https://my.oschina.net/meSpace/blog/51946

linux下网站平台的搭建——apache +PHP+mysql

linux下网站平台的搭建——apache PHPmysql实验环境 VMware 6.5.2redhat Enterprise 5 AS我的内核版本本文实验基础环境已经做好了一个dns的解析本文中的几个组件均为源码包安装 &#xff0c;介于可能有版本的不同安装略有差异本文大致可以分为以下步骤mysql的安装与简单配置ap…

一次设计高可用网站的实战经验

我公司前段时间做了一个活动&#xff0c;花了5000块购买了5台虚拟机(每台cpu 为单核2GHZ&#xff0c;内存为1.5GB)做了一个两个月大活动,我设计支持高并发的系统如下&#xff1a; 活动的特点是高并发&#xff0c;逻辑不是很复杂&#xff0c;因此我采用DNS做负载均衡器nginx做前…

网站的灰度发布

2019独角兽企业重金招聘Python工程师标准>>> 1、概述 在传统软件产品发布过程中&#xff08;例如微软的Windows 7的发布过程中&#xff09;&#xff0c;一般都会经历Pre-Alpha、Alpha、Beta、Release candidate&#xff08;RC&#xff09;、RTM、General availabil…

阿里云服务器:IIS网站的架设(一、环境设置与安装IIS网站 二、网站的基本设置 三、建立新网站(未完待续))...

Windows Server 2012 R2的Internet Information Services &#xff08;IIS&#xff09;网站的模块化设计&#xff0c;可以减少被攻击面并减轻管理负担&#xff0c;让系统管理员更容易架设安全的具备高扩展的网站。 欢迎关注github&#xff1a;https://github.com/saucxs 一、环…

只有搞Java开发的才知道!java相关技术网站

第一篇Linux基础学习篇 目录 第零章﹑计算机概论关于电脑的硬件组成部分﹐其实你可以观察你的台式机来分析一下﹐依外观来说这家伙主要可分为三部分﹐分别是∶ 输入单元∶包括键盘﹑鼠标﹑读卡机﹑扫描仪﹑手写板﹑触摸屏等等一堆﹔主机部分∶这个就是系统单元﹐被主机机箱保护…

MVC网站发布到 IIS

接下来将发布成功的站点部署到iis7.0。 步骤如下&#xff1a; 1. 安装 Microsoft .net FrameWork 4.0安装包&#xff08;网站开发时候使用的就是.net framework4.0框架&#xff09;; 2. 安装ASP.NET MVC 4.0 ; 3. 设置IIS的“ISAPI和CGI限制”中的“ASP.NET v4.0.0.30319”为允…

Slog42_支配vue框架初阶项目之博客网站-单页-默认头像的布局和定位

ArthurSlogSLog-42Year1GuangzhouChinaAug 19th 2018GitHub掘金主页简书主页segmentfault从业之路不同 机缘也不同 人生轨迹由机缘组成 想要有什么样的机缘 也就明白了自己要走的路 开发环境MacOS(High Sierra 10.13.5) 需要的信息和信息源&#xff1a; css 元素框的类型HTML D…

在电脑上测试手机网站全攻略

最近公司要开发网站的移动版&#xff0c;让我准备准备知识&#xff0c;话说本人开发移动网站的经验还真不多&#xff0c;最悲剧的事情就是我的手机是个经典的诺基亚&#xff0c;而且公司还不给配手机&#xff0c;这是有多扣啊&#xff0c;没办烦啦&#xff0c;没有手机就用电脑…

教资报名网站显示无法访问此页面

网上很多人解决办法是 把网址复制出来, 开头的https:// 换成 http:// 添加到浏览器的兼容性页面应该就能打开了 ,最终效果是可以的,但是治标不治本, 在选完笔试科目后 点击付款就会出现和之前相同的问题 2.最终解决办法如下 勾选为TLS 1.2, 1.1即可

常用工具网站

1. 在线PDF转Word免费的转换器工具 https://www.pdfkz.com/pdf-to-word 2. 在线图片免费拼接 https://www.toolnb.com/tools/tppj.html

适合程序员学习的国外网站推荐

1.Baeldung 面向Java开发的学习网站, 网站页面精美, 风格略像Spring官网 https://www.baeldung.com/ 2.GeeksforGeeks 里面的内容不止于Java开发, 数据结构, 算法, 前端, 机器学习, 面试等等 GeeksforGeeks | A computer science portal for geeks 3.javaTpoint 适合初学…

程序员学习的5个国外网站推荐

&#x1f4d2;一、StackOverFlow&#x1f4d2; 链接 : Newest Questions - Stack Overflowhttps://stackoverflow.com/questions StackOverFlow作为全球最大的技术问答交流网站, 浏览时也是纯英文网站所以首先养成用英文来搜索你的问题, 类似CSDN中的问答 &#x1f4d3;二、…

【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构

随笔- 80 文章- 1 评论- 531 【大型网站技术实践】初级篇&#xff1a;搭建MySQL主从复制经典架构 一、业务发展驱动数据发展 随着网站业务的不断发展&#xff0c;用户量的不断增加&#xff0c;数据量成倍地增长&#xff0c;数据库的访问量也呈线性地增长。特别是在用户访问高…

Oracle Erp常用网站

2014-01-01 Created By BaoXinjian 英文站 Oracle EBS R12 官方参考手册(User Guide, Implementation Guide)Oracle Integration Repository关于各类API、接口等信息。Oracle White Paper LibraryOracle白皮书&#xff0c;涉及数据库、应用、解决方案等多个领域。Oracle E-Deli…

开发网站接触到的软件---自我总结

1.Dreamweaver&#xff08;DW&#xff09; 可视化工具&#xff0c;DW的内存占用大概平常80M左右&#xff0c;刚开始写网页就是用的DW&#xff0c;后面发现webStorm的功能更加强大&#xff0c;DW后期使用感觉很卡 优点&#xff1a;图片热区的设置&#xff0c;用DW很方便。 2.web…

百度SEO:最新搜索引擎排名因素有哪些?

搜索引擎排名规则&#xff0c;一直以来都是一个争论的焦点&#xff0c;随着百度算法的不断调整&#xff0c;实际上它是一个动态因素&#xff0c;自从熊掌号上线以来&#xff0c;可谓搜索排序大洗牌&#xff0c;毫无疑问内容是基石&#xff0c;它几乎更古不变&#xff0c;而链接…

结合bootstrap与后端CI框架的网站开发(一)

2019独角兽企业重金招聘Python工程师标准>>> CI框架是一套基于MVC的后端框架&#xff0c;历史比较就远了&#xff0c;非常轻量级&#xff0c;对于一些小网站的开发已经绰绰有余。不过我仅对VIEW层&#xff0c;也就是前端部分进行记录。如有错误&#xff0c;希望得到…

Nginx+Keepalived实现网站高可用方案

转载:http://openskill.cn/article/166 公司内部 OA 系统要做线上高可用&#xff0c;避免单点故障&#xff0c;所以计划使用2台虚拟机通过 Keepalived 工具来实现 nginx 的高可用&#xff08;High Avaiability&#xff09;&#xff0c;达到一台nginx入口服务器宕机&#xff0c…