惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
月光博客
月光博客
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Visual Studio Blog
博客园 - 叶小钗
博客园 - 司徒正美
美团技术团队
博客园_首页
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News

博客园 - Ivony...

扩展 DbUtility (1) DbUtility v3 背后的故事 DbUtility v3 Jumony Core 3,真正的HTML引擎,正式版发布 新项目,WebTest Jumony Core 2.2 发布 尝鲜Jumony for MVC,体验插件化网站开发 用网站(WebSite而不是WebProject)项目构建ASP.NET MVC网站 浅谈ASP.NET网站的编译模型和参数 C#5纯属YY的展望 通过源代码研究ASP.NET MVC(八) 通过源代码研究ASP.NET MVC(七) Jumony入门(四)无缝体验 Jumony入门(三)初探解析器 Jumony入门(二)初识选择器 Jumony入门(一)从这里开始 一段自动搜索所有SVN工作目录进行更新的PowerShell脚本 通过源代码研究ASP.NET MVC中的Controller和View(六) 通过源代码研究ASP.NET MVC中的Controller和View(五)
Jumony for MVC现状和展望
Ivony... · 2011-04-15 · via 博客园 - Ivony...

Jumony一直在致力于成为一个优秀的ASP.NET MVC视图引擎,同时也顺便修整一下MVC的种种问题,所以,Jumony for MVC一直是Jumony一个非常重要的子项目,尽管它还没有一个公开的稳定版本,但由于Jumony是一个完全开源的项目,任何人都可以在http://jumony.codeplex.com/下载Jumony最新的源代码,当然也就包含Jumony for MVC。这篇文章简单的介绍下Jumony for MVC的现状和将来的发展方向。

那么首先,Jumony已经作为ASP.NET MVC的一个视图引擎,借助ASP.NET4的特性,Jumony for MVC并不需要任何一行多余的代码,只要你的网站或Web项目引用了Ivony.Html.Web.Mvc的项目或DLL,Jumony for MVC就会自动将自己的视图引擎JumonyViewEngine注册到系统中。默认情况下,JumonyViewEngine呈现出与默认的WebFormViewEngine相似的视图查找逻辑,只不过Jumony查找的是.html和htm文件。特别的,与Jumony for ASP.NET类似,JumonyViewEngine在找到视图文件后,会查找是否存在.html.ashx这样的文件,若存在,且该文件所定义的Handler类型继承于ViewHandler,那么这个ViewHandler就会自动被当作IView对象来返回(ViewHandler实现了IView)。ViewHandler基类提供了处理HTML视图所需要的一切环境,ViewContext或是ViewModel,还有UrlHelper。

为了配合MVC的一些功能,Jumony for MVC也对HTML做了小小的扩展。可以简单的在一个链接(<a>)里面添加action和controller(可选)属性便可以直接使得这个链接变成一个ActionLink,添加其他RouteData的方式也很简单,只需要在名称前面加个下划线就可以了。像是这样:

<a action="Index" controller="Home" _id="1" >Home</a>

MVC中的部分视图,可以使用<partial>标签来实现,<partial>有两种格式,一种是直接指定action和controller(可选)属性,这样,Jumony for MVC会自动调用HtmlHelper.Action方法来执行指定Action并将返回的结果嵌入。另一种则可以设置view属性,指定一个视图名称,这种情况下Jumony for MVC则会调用HtmlHelper.Partial方法。

上述的HTML扩展,不需要html文件附有.html.ashx的视图处理程序,只要是被JumonyViewEngine当作视图的HTML文件,这些HTML扩展便会自动应用。所以很多简单的partial(譬如说页头)或是页面(譬如说信息提示页),可以不需要ashx文件的辅助处理。

Jumony for MVC的部分视图也使用标准的HTML格式,也支持附加的ashx文件支持,只是继承的类型不能是ViewHandler而必须是PartialViewHandler,在将来的版本中,将考虑统一这两者。

除此之外,考虑到ASP.NET MVC行为诡异的默认路由实现。Jumony for MVC还提供了一个简单的路由实现,SimpleRoutingTable。主要针对默认Route莫名其妙的自动继承当前路由值和要命的先到先得机制做了改善。

路由对象先到先得的机制是由RouteCollection的路由查找实现而决定的,所以为了解决这个问题,SimpleRoutingTable把所有的路由规则合并到一个RouteBase对象,也就是SimpleRoutingTable实例,这个实例会按照确定的规则查找最合适的规则(SimpleRoutingRule)来进行路由。任何可能冲突的规则是不能添加到一个SimpleRoutingTable对象中的。

秉承Jumony的传统,Jumony for MVC不仅仅是一款足够优秀的ASP.NET MVC视图引擎,且与现有的视图引擎保持了最大的兼容,在Jumony for MVC的视图中可以嵌入WebForm视图引擎的partial,反之同样可行。

以上,就是Jumony for MVC的现状。

展望未来,Jumony for MVC还存在很多未能解决的问题。

譬如说<form>的action属性如何指定路由的链接?当然现阶段我们可以简单的在ashx中找出这个<form>元素再调用SetAttribute方法来设置。但直接在HTML中书写显然是更惬意的事情。

当然还有表单验证,尽管Jumony Forms子项目提供了有限的表单验证能力,但如何与MVC的Model验证模型结合起来,又或者有无必要结合(事实上这个依赖于DefaultModelBinder的模型本来就不是那么轻巧)。

Jumony View已经为缓存做好了准备,其实现了ICachableResult接口并可以从产生一个ContentResult用于缓存,如果缓存命中,则可以直接用这个ContentResult来代替ViewResult从而提高性能。但着需要Controller层面的配合。所以Jumony正在准备自己的JumonyController。

对于一些简单的数据绑定,我们也会希望是不是可以用简单的HTML扩展来完成,例如:

<a action="Detail" controller="News">
  <binding source="ViewModel" property="Title" target=":text" />
  <binding source="ViewModel" property="ID" target="_id" 
/>
</
a
>

最后,Jumony for MVC作为ASP.NET MVC的一款视图引擎,借助Jumony强大的HTML能力,使得ASP.NET MVC的View返璞归真,最大程度上接近原始的HTML而非代码和HTML的杂凑,是非常值得一试的一个视图引擎。