Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > .NET > C#.NET > .Net下MVC的使用(二) --UIP介绍
【标  题】:.Net下MVC的使用(二) --UIP介绍
【关键字】:.Net,MVC,UIP
【来  源】:BLOG.CSDN.NET

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

Your Ad Here 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它只是单纯一个实现页面导航的可配置性的框架,但是是以开发的复杂度为代价的。
Servlet与Applet交互:【上一篇】
[翻译] C# 3.0语言规范:【下一篇】
【相关文章】
  • c#.NET使用小结(1)
  • Asp.net与SQL一起打包部署安装(收集)
  • 全面解决.NET下Web项目打开失败的问题(也可用于.NET下Web项目的迁移)
  • .net 中委托与事件的理解!
  • 关于ASP.NET模式对话框之间的值传递问题,求教高手
  • 在.NET中获取一台电脑名,IP地址及当前用户名
  • 利用.NET语言开发自己的脚本语言(二)--动态编译
  • Connecting to Pocket PC thru VS .NET 2003
  • 用来获取网页的类(转!vb.net参考)
  • ASP.NET中DataGrid控件的使用
  • 【随机文章】
  • delphi对.net2.0webservice封装问题
  • HP-ux.Veritas NBU5.0 备份错误96 (status code : 96)故障排除与解决方案
  • 数据库技术 >>SQL Server
  • 病毒名称 色情电话拨号器(Win32.Troj.Dialer.e)
  • R O R 开发前奏
  • 敏捷在中国企业管理中的位置和发展
  • 主频、外频和超频
  • 软件体系结构学习笔记
  • oracle init.ora 文件据在位置
  • PS视频教程:大小的概念(5)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.