您的位置:首页 > 编程语言 > ASP

Asp.net Mvc 的积木,谈Asp.net MVC中视图逻辑模块化和controller组件的使用方法

2008-07-17 12:47 826 查看
我是阿瑞,第一次写技术文章,没啥经验,语无伦次的地方还请大家多多体谅。

谈谈第一个话题:Asp.net MVC中利用UserControl任意组装你的View。

在Asp.net MVC中,您可以使用UserControls

来简化或模块化你的View逻辑。

当然可以像传统webform中那样使用。

<uc1:News ID=control1 runat=server listcount="3" />

但是这样使用,有两个缺点:

1.aspx页面顶部必须加个讨厌的声明。对于view来说,当然越简练越好。

2.还有一个缺点,就是传递的参数必须都是基础数据量类型,如果要传递

Object,我们该怎么办呢?

好在贴心的asp.net mvc提供了一系列的RenderUserControl方法。

还可以传递任何参数,还可以构造初始属性值,可以不用在aspx顶部进行声

明。非常干净清爽。

<%=Html.RenderUserControl(“~/UserControls/NewsList.ascx”)%>

<%=Html.RenderUserControl

(“~/UserControls/NewsList.ascx”,ViewData.News)%>

第三个参数以匿名方法的形式,可以方便构造出ascx的缺省属性。

<%=Html.RenderUserControl

(“~/UserControls/NewsList.ascx”,ViewData.News, new

{NewID=2})%>

好了,现在usercontrol已经可以很好的切割组装view层逻辑了,

但是无论如何组装,都是被动接受controller的调用的。

这有什么问题么?请思考如下场景,也是我之前请教邹建的问题:

--------------->

有一个场景,不知道如何用mvc实现

比如一个新闻系统,首页把各个新闻分类里的新闻标题的最新N条读出来,

在webform下,我把首页新闻列表封装成ascx,并且自定义了两个属性:

新闻类别和显示条数。这种情况下,首页aspx里只要有显示列表的地方,设

置一下这两个属性就OK了。也就是说,改首页aspx,就可以最终只取需要

的数据。

而在mvc下,控制取数据部分和页面彻底分离,上面的逻辑,既要让美工去

修改页面,也要程序员修改controler?

邹兄给我得回答是言简意赅 :用RenderComponent。

<-------------------------

这就引入了第二个话题:

web组件的使用,此web组件,不仅仅是像ascx那样包含view,更重要的是

他有自己的controller行为。而这个组件可以直接被其他的view所调用,

虽然像绕口令,不过结合上面的场景就好理解了。

这个被view层直接调用的controller必须是继承于ComponentController,

这和普通的controller是不一样的。类似这样:

public class NewsComponentController : ComponentController

{

public void ContentList()

{

RenderView("NewsList", new

VstarApp.DAL.Service.ContentInfo_Service().GetAllData());

}

}

而这个 ComponentController所Render的视图文件路径也是有规定的,是

~/Components/yourcontrollerName/Views/ViewName.aspx

对于上面的NewsComponentController来说,就是

~/Components/NewsComponent/Views/NewsList.aspx

所以视图路径要建对哦。

剩下的工作,就是在其他view里调用这个组件controller

<%=Html.RenderComponent<CMSWeb.Controllers.NewsComponentController>(f => f.ContentList())%>

好了,一切ok.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: