.Net下MVC的应用(二) --UIP介绍

UIP(User Interface Process Application Block)是微软开源的MVC框架,支持WebForm和WinForm。虽然不严格遵循MVC模式,UIP主要包含View和Controller,提供页面导航功能。本文介绍了UIP的组成部分,如View、Controller、Navigator、ViewManager和Configuration,并详细阐述了状态持久化方法。通过配置示例展示了UIP如何实现登录、错误处理和页面跳转。尽管UIP简化了页面导航,但未考虑Model,限制了某些功能,如表单和Model的数据绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UIP(User Interface Process Application Block )是微软社区开发的众多Application Block中的其中之一,它是开源的。UIP是一个MVC框架,区别与其它的一些MVC框架是它不仅支持webForm(网页),同样也支持winForm,但如果要从严格的M-V-C三者关系上去看,UIP看来也不能称之MVC模式的实现,UIP最多有V-C的关系,没有考虑进Model。UIP单纯从名字上看它只管表示层的流转,应该是微软在Code-behind上对MVC的一个修补,加上Asp.Net的事件驱动开发和WebControl所见及所得的开发模式,如果把Model也考虑在内,那这些特性将受到很大的影响(以后再讲这些影响,这里先略过)。所以简单的说,UIP由MVC中的V-C两部分构成,主要功能就是实现可配置的页面(表单)导航。
根据上面的分析来对UIP做一下分解,其构成主要有:
View――这个就不多做解释了,页面的CS类如果要实现其导航功能,就继承此类;
Controller――这个应该很好理解;
Navigator――是实际导航器的功能,从Controller得到下个View的名字,据此来导航到哪个View,但是它并没有直接就Redirect到相关的页面上去了,而是由ViewManager来Redirect的;
ViewManager――管理View的,主要得到当前View的一些信息,比如State,激活View(即Redirect到页面);
Configuration――负责读取配置用;
State――是一个状态,是对当前的任务一个保存状态,UIP提供了4种状态维护的持久化方法:
MemoryStatePersistence:内存状态维护
SessionStatePersistence:Session保存状态(一般采用这个)
SqlServerPersistState:保存到数据库,这个可以用分布式部署上去,可实现单点登录
IsolatedStoragePersistence:保存到文件
状态还可以有保存状态的时间期限。

UIP中还有一个Task的概念,据我的理解是一组View形成的一个页面调用序列集合,等一下讲到UIP的Config的时候再讲。


那么就可以开始采用UIP的导航功能了,下面简单得以登录来做看一下UIP的配置,假设有login.aspx,index.aspx,error.aspx其cs类都从View继承(当然您可以写一个ViewBase类,单一从此继承),有了一个myController的从Controller继承的类,那么可以根据下面一组配置来实现一个登录成功到index页面,失败到error(一般要停在登录页面提示重新登录,这里仅做例子)。
先在Web.Config中加入加入配置节
<configSections>
<!--UIPB Configiration-->
<section name="uipConfiguration" type="Microsoft.ApplicationBlocks.UIProcess.UIPConfigHandler,Microsoft.ApplicationBlocks.UIProcess " />
</configSections>
然后加入uipConfiguration的具体配置
<uipConfiguration enableStateCache="true" allowBackButton="true"> 
        <objectTypes>
    //ViewManager
<iViewManager 
name="WebFormViewManager"
type="Microsoft.ApplicationBlocks.UIProcess.WebFormViewManager, Microsoft.ApplicationBlocks.UIProcess "/>

    <state 
                name="State" 
                type="Microsoft.ApplicationBlocks.UIProcess.State, Microsoft.ApplicationBlocks.UIProcess "/>
            //controller
            <controller 
                name=" myController " 
                type="myController,myWebUI " />
             
             <!—controller 这里还可以加入Controller/-->
             
//这里采用Session来持久化状态
          <statePersistenceProvider 
                name="SessionStatePersistence"  
                type="Microsoft.ApplicationBlocks.UIProcess.SessionStatePersistence, Microsoft.ApplicationBlocks.UIProcess />
        </objectTypes>   
//下面定义view
         <views>
            <view name="logon" type="logon.aspx" controller=" myController " />
            <view name="index " type="index.aspx" controller=" myController " />
            <view name="error" type="error.aspx" controller=" myController " />
        </views>
        //**导航图,这里就是对应的一个Task
        <navigationGraph 
iViewManager="WebFormViewManager"
name="LoginTask " 
state="State" 
statePersist="SessionStatePersistence"
startView="login"//开始view
cacheExpirationMode="Absolute"//状态保存方式,分为相对还绝对时间 cacheExpirationInterval="12:00:00">//这里保存状态的时间间隔
>
<node view='login'>
                <navigateTo navigateValue="success" view='index' />
<navigateTo navigateValue="fail" view='error' />
            </node>
            <!—node 这里可以添加更多的Node-->
        </navigationGraph>
        <!--navigationGraph 这里可以添加更多的-->
</uipConfiguration>

UIP的启动没有总控,而是采用人工的方法,手工启动的方法是在一个没有从View继承的Apsx中启动,注意,一定要没有从View类继承,否则会在启动类中实例化页面时找不到Task而出错,因此,在启动类的Page_Load方法中实例化一个Task,然后用UIPManager的启动类的StartNavigationTask方法来启动。【UIPManager.StartNavigationTask("LoginTask",task);//task为Task的实例】

正是因为UIP没有总控,这在实现上就不会和页面Page类从IHttpHandler继承的而造成冲突(这种冲突等以后再讲),就完全保留其事件驱动的特性,UIP的解决方案中这个是它的优点。但是,缺点也是很显然的没有考虑Model,就不能实现页面表单和Model的相互赋值,页面总控验证等功能。
总结UIP它只是单纯一个实现页面导航的可配置性的框架,但是是以开发的复杂度为代价的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值