Orchard项目笔记一

博客园开博了,首先感谢LXC同志,在他的催促下,我决定开始写这一系列文章。看到了市面上关于Orchard说明性的文章海洋一般,但是真正的应用在项目中的文章很是少见,于是决定将自己在进行Orchard项目进行中发现的问题和解决方案,这里包含未解决的问题,以供大家讨论。

闲言少叙,走你。

Orchard是一个水很深的框架,这是今天我想告诉大家的。

应用场景:想要做一个文件上传功能。

Orchard思维:首先在Gallery中检索是否有第三方的Module,存在,然后看看是否使用自己的应用范围,因为检索的模块显示效果比较粗糙,于是决定重用其中的Service以及Migration文件中的内容,当然还是要做一些修改,比如在Part中增加一些用于显示的字段,这导致Migration文件以及Part(Record)类需要做相应的调整。

后台部分搞定,然后便是前台部分了。首先考虑后台要向前台传递什么参数,这里正规一点的做法是定义一个ModelView,糙一些的方法就是定义一个dynmaic对象,是否被重用是一个考虑重点。

技术实现细节:

1.文件上传机制。这里就不多做介绍了,我是参考的是Zveen.Attachments模块。

2.PartialView机制。这是一种控件重用机制,MVC还是带来一些原始概念,新壶旧酒之感哈哈。因为我们需要重用页面顶端的Tab,但是我们的Tab是放在另外一个A工程中怎么办?木有问题,提取Tabs.cshtml到A工程的Views文件夹的根目录下面,然后引用A工程,在页面中写下:

@{Html.RenderPartial("Tabs", Model.TabViewModel as TabViewModel);}

搞定。这里传入ParitalView里面的就是一个ViewModel,重用那是必须的,所以义无反顾的定义了一个ViewModel(而不是Model,model是中间层和DB层交互,ViewModel是中间层和页面交互,中间层在Orchard里面包括:Controller,Driver,Service,Handler)。

3.提交机制:

@using(Html.BeginFormAntiForgeryPost(Url.Action("UploadFiles", new { contentType=contentType, contentID=Id}))){

<div>…</div>}

Orchard基于MVC,这里面get和post操作被严重划清界限,如果自己写的submit按钮,需要在提交范围内使用@using...的方式,“UploadFiles”就是Controller中定义了方法(切记:使用【HttpPost】进行修饰)。

 

posted on 2012-12-12 21:53  下士闻道  阅读(678)  评论(0编辑  收藏  举报

导航