zoukankan      html  css  js  c++  java
  • Asp.net Mvc 的积木,谈Asp.net MVC中视图逻辑模块化和controller组件的使用方法

    我是阿瑞,第一次写技术文章,没啥经验,语无伦次的地方还请大家多多体谅。
    谈谈第一个话题: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.


  • 相关阅读:
    PowerMockito
    java--树封装
    plugin--Lombok
    Mysql--sql
    Oracle--sql
    hive--分区表和分桶表
    hive支持的数据类型和存储格式
    HashMap
    golang 创建 tun 设备
    golang ctrie demo
  • 原文地址:https://www.cnblogs.com/vstar/p/1245117.html
Copyright © 2011-2022 走看看