something

简介: 1. AutoPostback属性     如果希望把Changed事件立即传送给服务器(例如,改变了DropDownList的选项),可以把AutoPostBack属性设置为true。

1. AutoPostback属性

    如果希望把Changed事件立即传送给服务器(例如,改变了DropDownList的选项),可以把AutoPostBack属性设置为true。

________________
2. Page类的PreviousPage属性
    利用PreviousPage从前一个页面定义的控件中获取值,有以下两种方法:

    ·i  利用FindControl()

        例:

            在新页面中写入如下代码

            string firstName = ((TextBox)PreviousPage.FindControl("txtFistName")).Text;  // txtFistName是前一个页面中控件的ID。TextBox将找到的控件转换成TextBox类型。


    ·ii 定制结构,创建强类型化PreviousPage

        例:

           首先,在App_Code中创建一个 新的 C#文件。假设命名为 RegInfo.cs,并在其中创建一个结构,如下:

           public struct RegInfo

           {
                public string FirstName {get; set;}

                public string LastName {get; set;}

                ......

           }

           

           在第一个页面中添加公共属性 RegInfomation

          public RegInfo RegInfomation

           {
                get

                {
                    return new RegInfo()

                    {
                        FirstName = txtFirstName.Text;

                        LastName = txtLastName.Text;

                        .....

                    }

                }

           }

           

           在第二个页面的Page指令下添加 PreviousPageType指令

            «% Page Language="C#" AutoEventWireup="true" CodeFile="SecondPage.aspx.cs" Inherits="SecondPage_aspx" %»

            «% PreviousPageType VirtualPath="~/Default.aspx" %»

   

           然后,就可以在第二个页面中使用如下代码,调用第一个页面的数据,如下:
           RegInfo ri = PreviousPage.RegInfomation;        // 将第一个页面的 公共属性 赋值 给 ri

            label1.Text = ri.FirstName;                            // 用ri.FirstName来获取第一个页面的txtFirstName.Text 的值

            .......

________________
3. PreviousPage.IsValid 验证
    当第一个页面中 包含输入有效性验证控件,而回送的页面不同于 包含验证的第一个页面时,在页面中需要用到IsValid属性,验证上一个页面的结果是否有效。如下:

     protected void Page_Load(object sender, EventArgs e)

     {
        try
        {
            if (!PreviousPage.IsValid)

            {
                labelResult.Text = "Error in previous page";

                return;

            }

            .........

        }   ......

     }

    ********************************

    验证控件创建了客户端的JavaScript代码。
    可在验证控件的EnableClientScript属性设置是否使用JavaScript验证,设置为false就可以关闭JavaScript。

    也可以用Page类的ClientTarget属性:

                 ClientTarget = downlevel 脚本代码不返回给客户端

                 ClientTarget = uplevel    脚本代码返回给客户端

                 ClientTarget = automatic 根据浏览器的功能,自动选择是否返回脚本代码

            
________________
4. 状态管理(ViewState、Cookie、Session、Application、Cache)
    
状态类型  客户端 或 服务器 资源  有效时间  
ViewState  客户端  只在一个页面中  
Cookie  客户端  关闭浏览器时会删除临时cookie,永久cookie存储在客户系统的磁盘上  
Session  服务器  会话状态与浏览器会话相关。会话在超时后无效(默认为20分钟)  
Application  服务器  应用程序状态在所有的客户端上共享,这个状态在服务器重启之前都是有效的  
Cache  服务器  类似于应用程序状态,高速缓存是共享的。但是,是高速缓存无效有更好的控制方式  

   

    ViewState:

        ViewState包含的状态与控件发送给客户端时 包含的状态相同。

        当浏览器把 窗体发送 回服务器时, 控件包含新值,而 ViewState包含初始值。如果ViewState中的初始值 与 控件中的新值有区别时,调用相应的事件处理程序。


        使用ViewState的缺点是,数据总是要从服务器 -» 客户端,再 客户端 -» 服务器。增加了网络流量。
        关闭ViewState的方法:
        «% Page Language="C#" AutoEventWireUp="true" CodeFile="Default.aspx.cs" Inherts="Default_aspx" EnableViewState="false" %»

       

        还可以设置 控件的 EnableViewState属性。只有没有配置ViewState的控件才使用页面配置的值。

       

        还可以把定制的数据存储在ViewState中。为此,可使用索引符 和 Page类的ViewState属性。

        ViewState["mydata"] = "my data";   //将字符串存储在 ViewState中

        读取:

        string mydata = (string)ViewState["mydata"]; //将前面存储的值读取出来。


        在发送客户端的HTML代码中,整个页面的ViewState存储在一个隐藏字段中:

        «input type="hidden" name="_VIEWSTATE" value="/wEPDwUKLTU........................."/»

        使用隐藏字段的优点是,每个浏览器都能使用这个特征,用户不能关闭它。


    Cookie:

        ViewState只能保存在页面中。如果状态应保存在多个不同的页面中,就应使用cookie在客户端保存状态。

       

       cookie在HTTP头中定义。
        使用HttpRespone类可以把cookie发给客户端。
        Response是Page类的一个属性,它返回一个HttpResponse类型的对象。
        HttpResponse类定义了返回HttpCookieCollection的Cookie属性。
        使用HttpCookieCollection可以向客户端返回多个cookie。

       

        如何把cookie发给客户端:

            string myval = "myval";

            HttpCookie cookie = new HttpCookie("mycookie");   //首先实例化一个HttpCookie对象,并设置cookie的名称为“mycookie”

            cookie.Values.Add("mystate",myval);                 // 用HttpCookie类的Value属性可以添加多个cookie值

            Response.Cookie.Add(cookie);                       // 发送cookie


        设置cookie有效期:

            cookie可以是临时的,仅在一个浏览器会话中有效,也可以是存储在客户端磁盘上。

            可以使用HttpCookie对象设置的Expires属性。

            HttpCookie cookie = new HttpCookie("mycookie");

            cookie.Values.Add("mystate","myval");

            cookie.Expires = DateTime.Now.AddMonths(3);    // 设置cookie有效期为3个月

            Response.Cookies.Add(cookie);

        尽管设置了cookie,但不一定能存储那么长时间。
        用户可能会删除cookie;

        如果本地有太多的cookie,浏览器也可能删除它。

        浏览器只能为每个服务器存储 20 个cookie;为所有服务器 存储 300个cookie;cookie大小有限制,cookie不能存储多于4K的数据。达到极限后,就删除有一段时间不用的cookie。


        读取客户端发送的cookie:

        客户从服务器请求页面时,相应的cookie就可以使用了。

        并作为HTTP请求的一部分发送给服务器。

        要读取cookie,可以访问HttpRequest对象的cookie集合。

        与HTTP响应一样,Page类也有一个Request属性 返回 HttpRequest类型的对象。
        Cookies属性返回HttpCookieCollection,它可以读取客户端发送的cookie。

        可以用索引符来访问cookie,并使用HttpCookie的value属性从cookie中获取值。

        HttpCookie cookie = Request.Cookies["mycookie"];

        string myval = cookie.Values["mystate"];


   Session:

        会话状态 与 浏览器会话相关。 当客户第一次打开ASP.NET页面时,会话就开始了。当客户20分钟(session默认值)内没有访问服务器时,会话结束。

       
        可以在Global Application类中定义自己的代码,在会话开始或结束时运行。新的Global Application类会创建global.asax文件。文件中定义了一些事件处理程序:

        «% Application Language="C#" %»

        «script runat="server"»

            void Application_Start(object sender, EventArgs e) {......}

            void Application_End(object sender, EventArgs e) {......}

            .......

        «/script»

       

        会话状态可以存储在HttpSessionState对象中。
        与当前HTTP环境相关的会话状态对象可以使用Page类的Session属性来访问。


      设置会话状态:

        void Session_Start(Object sender, EventArgs e)  { Session["mydata"] = 0; } // 在Session_Start()事件处理程序中,初始化会话变量,mydata会话被初始化为 0

   

       读取会话状态:

        int val = (int)Session["mydata"];

      

       要把客户端 与 会话变量 关联起来, ASP.NET默认使用一个临时cookie 和 一个会话标识符。

       ASP.NET也支持没有cookie的会话,其中URL标示符 用于把 HTTP请求映射到同一个会话。


    Application: 
       如果数据要在多个客户端共享,就可以使用应用程序状态(Application)。比如,网站访问计数器。

       应用程序状态使用HttpApplicationState类,通过Page类的Application属性访问。

   

       以网站访问计数器为例:

       设置状态:

       void Application_start(object sender, EventArgs e) { Application["userCount"] = 0 ; } // Application_Start()是global.asax文件中的事件处理方法,在启动网站的第一个页面时启动。

       

       改变状态:

       void Session_Start(Object sender, EventArgs e)

       {
            Application.Lock();                                    // 应用程序状态改变之前,必须要用Lock()锁定,因为多个用户可以同时访问这个应用程序变量。

            Application["userCount"] = (int) Application["userCount"] +1;       

            Application.UnLock();                          // 锁定 与 解锁之间的时间应尽量短,否则,其他人就得等解锁之后才能操作。

       }


       读取状态:

       label1.Text = Application["userCount"].ToString();


    Cache:

        类似于Application,可以在多个客户端上共享。但Cache可以自定义何时失效。我们不是给每个请求读取文件或数据库,而是把数据存储在高速缓存(Cache)中。

        Cache使用System.Web.Caching名称空间 和 Cache类。


        给Cache添加对象:

        Cache.Add("mycache", myobj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10), CacheItemPriority.Normal, null );

        Page类的Cache属性返回一个Cache对象。使用Cache类的Add()方法可以把任意对象赋予高速缓存。
        第一个参数,定义Cache项的名称;

        第二个参数,是要被缓存的对象;

        第三个参数,定义了依赖关系。比如,Cache依赖于一个文件,当文件改变时,高速缓存对象就失效,本例中没有依赖关系;

        第四个参数,定义了Cache失效的绝对时间;

        第五个参数,定义了Cache失效的相对时间;

        第六个参数,定义了Cache的优先级,当需要删除Cache时,会根据优先级删除。优先级低的先删除。

        最后一个参数,定义了一个方法,当删除Cache调用。当Cache依赖于一个文件时,就可以用该参数:文件改变时,删除Cache,调用方法,再次读取文件,重新建立Cache。


        读取Cache:

        object o = Cache["mycache"];

        if(o == null)

            {  //reload the cache  }

        else

            {  //use the cache
                MyClass myObj = (MyClass)o;
            }

        使用Cache属性返回的对象之前,必须检查结果是否为null,当高速缓存失效时,结果就是null。

________________
5. 母版页
        母版页的扩展名是.master。

        母版前台的第一行指令:

            «% MasterLanguage="C#" AutorEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %»      //AutorEventWireup="true" 意思是会调用Page类的6个事件

             //Page类的六个事件:InitComplete,LoadComplete,PreLoad,PreRenderComplete,SaveStateComplete

        
        在web站点中,只有母版页才使用«html»,«head»,«body»和«form»等HTML元素。

        web页面本身只包含内嵌到«form»元素中的内容,嵌入到母版中的ContentPlaceHolder控件中。母版也可以为ContentPlaceHolder定义默认内容。


        母版前台代码:

            «html xmlns="http://www.w3.org/1999/xhtml

            «head runat="server"»

                «title» *****«/title»

                    «asp:contentplaceholder id="head" runat="server"»   

                    «/asp:contentplaceholder»            
            «/head»

            «body»

                «form id="form1" runat="server"»

                    «div»

                        «asp:contentplaceholder id="ContentPlaceHolder1" runat="server"»

                        «/asp:contentplaceholder»

                    «/div»

                «/form»

            «/body»

            «/html»


        使用母版页:

            在Page指令中使用MasterPageFile指令:

            «%Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="ture" CodeFile="Default.aspx" Inherits="default" Title="Untitled Page" %»  //指定母版页

            «asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="server" » «/asp:Content»

            «asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="server" » «/asp:Content»        //用Content控件把ContentPlaceHolder用ContentPlaceHolderID联系起来


            在web.config文件中配置:

            «configuration»

                «system.web»

                    «pages masterPageFile="~/MasterPage.master"/»

                    «!--....--»

                    «/pages»

                «/system.web»

            «/configuration»

            然后,在web页面中进行Content元素配置。

            如果,同时使用Page指令的masterPageFile属性  与  web.config中的配置,Page指令会覆盖web.config的设置。


        编程修改模板页:

            比如,可以把不同的母版页用于不同的设备 或 不同的浏览器。Page_PreInit(Page类的6个事件之一)是修改母版的最后一个地方。
            下面依客户端浏览器设置母版页:

            public partial class changeMaster: System.Web.UI.Page

            {
                void Page_Load(object sender, EventArgs e)    {.......}

                void Page_PreInit(object sender, EventArgs e)

                {
                    if (Request.UserAgent.Contains("MSIE"))                      //如果浏览器发送MSIE字符串 和 浏览器名称(由IE发送)

                    {
                        this.MasterPageFile = "~/IE.master";                       //就将母版设置为IE.master

                    }

                    else

                    {
                        this.MasterPageFile = "~/Default.master";

                    }

                }

            }

________________
6. CSS代码
        定义:

        «head runat="server"»

            «title»*****«/title»

            «style type="text/css"»

                .style1

                {
                    width: 100% ;

                    height:353% ;

                }

                .style2

                {
                    text-align: center ;

                    font-size:smaller ;

                }

             «/style»

        «/head»

        使用:

        «table class="style1"»

            «td style="style2"»

________________
7. 站点导航
        导航控件:SiteMapDataSource, Menu, SiteMapPath, TreeView

        
        站点结构由Web.sitemap定义。

        
        SiteMapDataSource是数据源控件,可以使用不同的提供程序。
        默认是使用XmlSiteMapProvider类来获取数据。
        XmlSiteMapProvider类默认使用Web.sitemap页面。
        如果重命名了Web.sitemap这个XML文件,就需要在提供程序的siteMapFile属性重新设置文件名。

________________
8. 用户控件 .ascx
        Control指令:

            在源文件的第一行中使用control指令表示用户控件。CodeFile 和 Inherits属性的用法与Page指令相同。

            «%@ Control Language="C#" AutoEventWireup="true" CodeFile="DemoUserControl.ascx.cs" Inherits="DemoUserControl" %»

            在用户控件中不是用«html»和«form»标记


        静态添加到页面:

            使用Register指令来引用用户控件:

                «%@ Page Language="C#" AuotEventWireup="true" CodeFile="DemoPage.aspx.cs" Inherits="DemoPage" %»

                «%@ Register TagPrefix="ucl" TagName="DemoUserControl" Src="DemoUserControl.ascx" %»   

                «html xmlns="http://www.w3.org/1999/xhtml

                ...

                «ucl:DemoUserControl ID="DemoControlA" runat="server"»    //«ucl:DemoUserControl»是根据Register指令中的设置的来的

                ...


        动态加载:

            void Page_Load(object sender, EventArgs e)

            {
                Control c1 = LoadControl("DemoUserControl.ascx");

                PlaceHolder1.Controls.Add(c1);            //PlaceHolder1是一个PlaceHolder控件

            }

________________
9. 个性化配置
        为了永远记住用户信息:可以使用个性化配置(profile)。

        个性化配置特性:

        ·i    永久存储的。
                    数据由”个性化配置提供程序“ 管理。
                    ASP.NET 3.5 包含了SQL 和 Access的提供程序。 但也可也自己开发提供程序。

        ·ii   强类型化的

                    会话 和 应用程序变量 必须转换类型后才能访问数据。

                    使用个性化配置文件,会生成带有个性化配置名的属性。 该属性的名称 和 类型 在 配置文件中定义。

        ·iii  可用于匿名 和 授权  用户

                    匿名用户的凭证可以存在cookie中。

       

        创建个性化配置:

            在web.config文件中添加«profile»XML元素部分

            «configurationxmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0

                «system.web»

                         .....

                    «profile»

                        «properties»   

                            «add name="Country" /»        //Country属性的默认类型为string

                            «add name="Visits" type="System.Int32" defaultValue="0" /»

                            «add name="LastVisit" type="System.DateTime" /»

                        «/properties»

                    «/profile»

                        .....

                «/system.web»

            «/configuration»


            写入配置:

            protected void OnCountrySelection(object sender, EventArgs e)

            {
                Profile.Country = this.DropDownListCountries.SelectedItem.Value;

                Profile.Save( );

            }   


            显示配置文件中的当前值:

            void Page_Load(object sender, EventArgs e)

            {
                if (!Page.IsPostBack)

                {    DropDwonListCountries.SelectedValue.Value = Profile.Country;}

                     labelLastVisit.Text = Profile.LastVisit.ToLongTimeString();   

                     labelVisitCount.Text = Profile.Visits.ToString( );

                    labelCountry.Text = Profile.Country;             // Profile的属性是强类型化的

                    
                     Profile.Visits++;
                     Profile.LastVisit = DateTime.Now;                    
            }


            Page类中没有Profile这个属性,该属性也不是在web.config中配置的,是动态创建的。
            Profile属性的类型是一个动态创建类,派生于ProfileBase,包含配置文件的定义。

        个性化配置组(«group»元素):

             «profile»

                «properties»

                    «add name="Country" /»

                    «add name="Visits" type="System.Int32" defaultValue="0" /»

                    «group name="ProfileGroup1" »

                       «add name="Country" /»
                        «add name="City" /»

                    «/group»

                «/properties»

            «/profile»

            访问组中定义的配置值:

            string country = Profile.ProfileGroup1.Country;

           

        组件的个性化配置:

            组件代码中,不能用Profile属性,要用HttpContext来访问。
            Current是HttpContext类的一个静态属性,它返回一个HttpContext对象。

            Profile属性返回一个ProfileBase类的对象,每个配置值可以用索引符来访问。

            索引符定义 返回 Object对象,所以,需要类型转换。

            string country = (string) HttpContext.Current.Profile["Country"];

       

        定制数据类型中的个性化配置:

            个性化配置 还可以 储存 定制数据类型,但这些数据需要支持序列化机制。

            个性配置支持的序列化机制: 
                XML序列化::XML序列化是默认的;

                二进制序列化:在二进制序列化中,类必须用[Serializable]属性标记;

                字符串序列化:在字符串序列化中,可以使用类型转换类来序列化;

           

            用serializeAs属性定义序列化方式,属性值有:Binary, Xml 和 String。

            如果没有设置该属性,就是用XML序列化。

                «profile»

                    «properties»

                        «add name="Demo" type="MyClass" serializeAs="Binary" /»

                    «/properties»

                «/profile»


        匿名用户的个性化配置:

            必须在配置文件中启用匿名用户,并逐个设置能用于匿名用户的每个个性化配置属性。

            «configuration»

                «system.web»

                    «anonymousIdentification enabled="true" /»

                    «profile»

                        «properties»

                            «add name="Country" allowAnonymous="ture"»

                        «/properties»

                    «/profile»

            配置匿名用户后,就会在 “个性化配置提供程序的数据库” 中创建匿名用户。
            匿名用户会获得ID,ID默认存储在cookie中。也可以用URL中的标识符来替代cookie。


            匿名配置信息 转移到 授权用户中:

            例如,在购物网站中,将商品加到购物车中,当发送订单时,就必须登录系统。将购物车的信息迁移到授权用户上。

            为处理匿名用户信息,可以利用global.asax中的以下事件:
                AnonymousIdentification_Create :当匿名用户第一次访问站点时,会创建匿名个性化配置。此时,会调用这个事件;

                AnonymousIdentification_Remove :授权用户访问站点,且授权用户请求中包含一个匿名用户的配置信息时,会删除匿名用户配置信息。并会调用这个事件;

                Profile_MigrateAnonymous : 调用完 AnonymousIdentification_Remove 后,会调用这个事件。利用该事件处理程序会把你们pe

            
                void Profile_MigrateAnonymous(object sender, ProfileMigrateEventArgs e)

                {
                    if (Profile.Country == null)                                       //登录后,Profile.Country 中存储的是授权用户的值。所以,先检测一下是否有值。

                    {
                        Profile.Ccountry = Profile.GetProfile(e.AnonymousId).Country;      //通过GetProfile(匿名用户ID)方法,读取匿名用户的配置。

                    }

                }

________________
10. Web Parts
        Web Parts框架有 区域(Zone)和 部分(Part)组成。Part 包含在 Zone中。

        共有四个区域(Zone):

            Web Parts Zone:这是主区域。一个页面可以有多个Web Part Zone来定义布局。区域中可以包含多个web part,用户控件 或 web服务器控件;
            Catalog Zone:该区域允许用户从目录中选取要显示的web part。

            Editor Zone:用户可以编辑Web Part的行为和外观。允许修改的web part有:AppearanceEditorPart, BehaviorEditorPart 和 LayoutEditPart。

            Connections Zone: 用于把多个web part连接在一起,实现web part之间的通信。

       

        0)WebPartManager控件:

                每个Web Parts站点都需要一个WebPartManager控件。通过它,可以管理 创建、删除或移动web parts。
                使用的方法:

                将下面的ASPX代码加到Web页面上

                «asp:WebPartManagerID=“WebPartManager1” runat=“server”» «/asp:WebPartManager»

                这个控件在运行期间,没有用户界面,也不需要配置任何属性。它的属性只能用于删除和关闭web part时配置一些警告信息。
                WebPartManager的方法可用于改变显示模式。

        1)WebPartZone控件:

                要使用Web Parts框架,至少要有一个WebPartZone。

                在ASPX页面中代码:

                «asp:WebPartZone ID="EventsZone" runat="server" »

                    «ZoneTemplate»

                        «ucl:ListEvents ID="ListEvents1" runat="server"/»  // 包含了一个用户自定义的控件

                    «/ZoneTemplate»

                «/asp:WebPartZone»

                WebPartZone中可以定义布局,颜色和菜单。 示例见书P546。

                «asp:WebPartZone BorderColor="#CCCCCC" Font-Names="Verdana"..........

       

        2)EditorZone控件:

                 AppearanceEditorPart, BehaviorEditorPart 和 LayoutEditPart三个控件如下图。
 
          
         3)CatalogZone控件:

                 CatalogZone控件是一个真正的目录-可以从目录中选取web part。
                 ASP.NET有三种目录: PageCatalogPart, DeclarativeCatalogPart, ImportCatalogPart。

                    PageCatalogPart:列出了web页面中所有的web part;

                    DeclarativeCatalogPart: 列出在«WebPartsTemplate»中显示定义的web part;

                        «asp:CatalogZone ID="CatalogZone1" runat="server"»

                            «ZoneTemplate»
                                «asp:DeclarativeCatalogPartrunat="server" ID="DeclarativeCatalogPart1" »
                                    «WebPartsTemplate»
                                        «ucl:ListEvents ID="ListEvents2" runat="server" /»

                                        «asp:Calendar ID="Calendar1" runat="server"  /»

                                    «/WebPartsTemplate»   

                            «/ZoneTemplate»

                        «/asp:CatalogZone»

                    ImportCatalogPart:用于将 存储在客户系统 中的Web Part 导入 到服务器上。

        4)ConnectionsZone控件:

                WebPartManager负责 初始化 和 管理Web Parts之间的通信。 web part通信分为:Provider 和 Consumer。

                Provider用属性[ConnectionProvider] & Consumer用属性[connectionConsumer]来标识。

                例:

                    Provider 部分:

                    在App_Code中创建一个文件,建立一个接口

                    public interface ICountry

                    {
                        string GetCountry();

                    }

                    在控件代码中:                    
                    public partial class ListEvents: System.Web.UI.UserControl, ICountry

                    {
                        ......

                        public string GetCountry()

                        {    return DropDownListCountries.SelectedItem.Value; }


                        [ConnectionProvider("Country", "CountryProvider")]

                        public ICountry GetCountryInterface()

                        {   return this;}
                        .......

                    }

                   

                    Consumer部分:

                    [ConnectionProvider("Country", "CountryProvider")]
                    public ICountry SetCountry(ICountry provider)

                    {    
                         string country = provider.GetCountry();

                         if (!string.IsNullOrEmpty(country))  { LabelCountry.Text = country; }

                    }                     
               

                接下来有两种方法建立连接:

                a) 使用WebPartManager建立静态链接:

                    «asp:WebPartManager ID="WebPartManager" runat="server" »

                        «StaticConnection»

                            «asp:Connection ID="CountryConnection"  ProviderID="ListEvents1" ProviderConnectionPointID="CountryProvider"
                                                                                          ConsumerID="Country1"  ConsumerConnectionPointID="CountryConsumer" /»

                        «/StaticConnection»

                    «/asp:WebPartManager»

               

                b) 启用ConnectionsZone,使用户控制连接和断开连接:

                    删除WebPartManager上的静态连接;

                    添加ConnectionsZone控件;

                    把WebPartMananager设置为ConnectDisplayMode;

                    在Provider或Consumer控件上会提供Connect菜单,点击后会打开ConnectionsZone,然后进行设置。

________________
11. JavaScript
        ECMAScript是这个脚本语言的标准化版本。

        Script元素:

            在HTML代码中添加JavaScript代码
            «script language="javascript" type="text/javascript"»
                «!--
                function foo()
                { ..... }
               --»
            «/script»    
            也可以把脚本代码放在一个单独的.js文件中, 然后,在script块中用src属性引用这个单独的文件:
            «script language="javascript" type="text/javascript" src="SampleScripts.js" /»   


        变量的声明:

            变量用var关键字声明(但这个var与C#3.0中的完全不同)。

            JavaScript不是强类型化语言,var声明的变量可以是任何类型,比如:

            var x=3;
            x="text";

            x=new Object();

            x.FistName = "Tom";

            变量时动态创建 和 赋值的。

       

            也可以在一行代码上声明和初始化对象:

            var p = {"FirstName":"Tom", "LastName": Turbo };

           

            访问属性值:

            var f = p.FirstName;

            var l = p["LastName"];


        定义函数:

            函数用function关键字定义
            function foo(arg1, arg2)
            {    ......    }
            也可以用Function对象来定义引用函数的变量。
            var add = new Function("x","y","return x + y");   //最后一个参数定义了函数的执行方式,之前的参数列出函数的变元。

        语句:

            JavaScript可以使用 :for,while,do...while,if...else,switch,for...in(代替foreach)

            
            for...in不仅可以迭代数组,还可以迭代对象的所有属性,如下所示:

            var p = {"FirstName":"Tom", "LastName": Turbo, "Country":"Austria"};  //三个属性

            var s = "";

            for (key in p)

            {
                s += key;        //key 为 p对象的属性

                s += ":"

                s += p[key];

                s += "/t";

            }


        预定义对象 和 方法:

            JavaScript提供了一些预定义对象 和 几个方法。

            string对象:
                用于处理字符串。
                方法有 toUpperCase()、toLowerCase()、indexOf()、LastIndexOf() 和 slice().
                IndexOf( )返回字符串中第一个子字符串;LastIndexOf()返回组合一个子字符串;slice根据指定的开始和结束为止返回一个子字符串。
            Math对象:

                可以进行一些计算。

                方法有abs(),sin(),cos(),tan(),random()和round。

            Date对象:

                表示时间和日期。

                方法getYear(),getMonth(),getDay(),getHours(),getMinutes()

         *********************************************************************************************************

         JavaScript例:

           

            创建对象:

            «script type="text/javascript"»

            function Person(firstName, lastName)            //用this关键字创建属性

            {
                this.firstName = firstName;

                this.lastName = lastName;

            }

           

            function toString()

            {
                return this.firstName + " " + this.lastName;

            }

       

            Person.prototype.constructor = Person;        //指定构造函数

            Person.prototype.toString = toString;           //指定类的成员函数

            //以上代码创建了一个Person类

   

            //应用Person对象的方法

            function getPerson()

            {
                var p = new Person ( "Natalie","Portman" );

                var label = document.getElementById("div1");    //在页面查找标记div1
                label.innerHTML = p.toString();

            }

            «/script»


            打开窗口:

            «script type="text/javascript"»

                function openWindow()

                {    window.open("ObjectDemo.aspx"); }

            «/script»

            添加HTML的Button控件,调用 上面的函数:

            «input id="Button1" type="button" value="button" onclick="openWindow();"/»

            open方法的参数:

            window.open("ObjectDemo.aspx", "_blank", "menubar=no, resizable=no, status=no, titlebar=no, width=300, height=300");

            第一个参数:应打开的文档;

            第二个参数:定义窗口的名称;

            第三个参数:是一个逗号分隔的特性列表。可以指定窗口的大小,是否显示几个选项。如菜单、标题和状态栏。

________________
                ****************************************Web 服务*****************************************************
12. SOAP
        简单对象访问协议,Simple Object Access Protocol。

        最初SOAP定义使用HTTP协议,所以SOAP调用可以通过Internet实现。
        SOAP1.2中,Web服务独立于HTTP协议,可以使用任意传输协议。但醉成用的协议仍是HTTP。(www.w3.org/tr/soap/ 可以获得规范)
________________
13. XML数据工具
        .net framework XML类提供了一些方法用来得到需要的数据。
        可用来得到web服务以XML显示的信息。如果用C#,有工具直接生成执行任务的代码。
________________
14.   Web服务的体系结构
        WSDL文档:
        Web服务描述语言,Web Service Description Language.

        WSDL包含的信息:服务支持的方法,如何调用方法,给服务传送的参数类型,从服务返回的参数类型。

        WSDL文档用于:创建带有相同方法 和 参数的 客户代理程序。
        规范:www.w3.org/tr/wsdl

       

            获得WSDL的方法:

            在.asmx后面加上?wsdl, 比如:http://localhost:1234/service1.asmx?wsdl

            所有ASP.NET Web服务都用.asmx扩展名来标识(就像.aspx)。


            生成WSDL:

            WSDL文档是用[WebMethod]属性自动生成的;

            [WebMethod]属性标记:
                例:

                   下面的是一段.NET Web服务程序
                    using System.Web;
                    using System.Web.Services;
                    .....
                    pulbic class Service:System.Web.Services.WebService
                    {
                        [WebMethod]

                        pulic string HelloWord()

                        {
                            return "Hello World";

                        }

                    } 
                服务中可以使用的方法都必须用[WebMethod]来标记。没有这个标记的方法可以从WebMethod中调用,但不能在客户机上调用。

            

       服务的调用方法:    

            要调用web服务上的方法,该调用 要先转换为 SOAP信息,SOAP信息是在WSDL文档中定义的。

            SOAP是客户机 和 服务器之间通信的 基本单元。


            SOAP可以由代理程序创建

            P567有详细的“HTTP POST请求” SOAP  消息 的 范例。

     

       WS-I基本个性化配置:

        SOAP存在有段日子了,有时很难其他销售商的web服务交互。所以,建立了WS-I组织。

        WS-I定义了Web服务需求。

        Web服务交互操作组织(Web Service Interoperability Organization) http://ws-i.org
        WS-I规范:www.ws-i.org/profile/basicprofile-1.1.html

          
________________
15. Web服务 和 .NET FRAMEWORK
        .net framework中用于处理web服务的namespace:

            a)System.Web.Services 用于创建web服务

            b)System.Web.Services.Description 可以通过WSDL描述 Web服务

            c)System.Web.Services.Protocols 可以创建SOAP请求和响应

        
       web服务程序:

            创建一个ASP.NET Web Service Application的project。起个名,比如WebServiceSample。

            项目模板生成的文件:Service1.asmx & Service1.asmx.cs

            在文件中写入代码,服务方法要用[WebMethod]标识           

       

             要为服务生成的描述信息 加一个唯一的标识--加一个命名空间。在Service1.asmx.cs文件中:
            [WebService(Namespace="http://www.areslab.com/WebService")]    //可以用公司的网址做标示符(可以确保其他公司不会用),链接不是一定要存在。

            [WebServiceBinding.......

            ......

       客户代理程序:

            客户机必须创建一个与 web服务所在的服务器之间的连接。

            并发送一个HTTP请求,传送一个SOAP消息(方法调用必须转换为SOAP信息)。这些有客户代理程序实现。

            客户代理执行程序的代码在SoapHttpClientProtocol类中

           

            a) System.Web.Service.Protocols.SoapHttpClientProtocol是客户代理程序的基类。

                Invoke()方法:转换参数,建立一个SOAP消息,发送给Web服务。

                Url属性:确定调用哪个web服务。

                BeginInvoke() & EndInvoke():用于异步调用。

            b) 其他客户协议:

                HttpGetClientProtocol & HttpPostClientProtocol 类,仅执行简单的HTTP GET & HTTP POST请求,没有SOAP调用系统的开销。

                但只能用于.NET客户机和服务器上都是使用.Net的情况。

                如果使用的是不同技术,就只能使用SOAP协议。

           

        客户程序:

            在解决方案中创建一个新的应用程序。

            添加一个服务引用--Project|Add service Reference--»
                                       discover|Service in solution(先前创建的服务会显示出来)--»

                                       在namespace上输入名称::WebServicesSample.

        
           程序代码:

                WebServicesSample.Service1SoapClient client = new WebServicesSample.Service1SoapClient();   //WebServiceSample就是上面添加用时输入的namespace;
                                                                                                                                                              //Service1SoapClient是生成的代理类(Service1.asmx & ~.cs),client为代理类的一个实例。

                textBox2.Text = client.ReverseString(textBox1.Text);        //代理类的实例,调用web服务的方法ReverseString

                //Service1SoapClient派生于ClientBase«Service1Soap»基类,这个基类在Invoke()方法中创建了一个SOAP消息。

                //WebServiceBingdingAttribute属性设置为Web服务:
                ....

                [System.Web.Services.WebServiceBindingAttribute(Name="ServiceSoap", Namespace="http://www.areslab.com/webservices")]    //标示符与web服务的标示符相同,绑定服务。

                public partial class Service: System.Web.Services.Protocols.SoapHttpClientProtocol

                {
                    public Service()

                    {    this.Url = SimpleClient.Properties.Settings.Default.SimpleClient_WebServicesSample_Service;   }    //构造函数中,url设置为Web服务。这个属性用于SoapHttpClientProtocol类,以请求一个服务。

                }

  
________________
16.  Ajax编程
        Ajax基于以下技术:

            DHTML, JavaScript, XmlHttpRequest, JSON(JavaScript Object Notation)
        ASP.NET 2.0 需要下载AJAX 库和控件, ASP.NET 3.5包含了ASP.NET AJAX。

        Microsoft提供了其他的一些工具,用于AJAX应用程序开发。可从 http://ajax.asp.net 下载。


        ASP.NET AJAX服务器端控件:

        ScriptManager: 每个AJAX页面都需要一个该控件实例;

        UpdatePanel:部分更新功能;

        Timer:定时调用一个函数;

        UpdateProgress:发送请求时,显示进度。


       ASP.NET AJAX客户端脚本扩展:

        Array类扩展,Date类扩展,String类扩展,Sys名称空间,Sys.Net名称空间。 说明见P587页。

   

        ScriptMannager的属性:

            EnablePageMethods:指定 ASPX页面上的静态方法,是否可以从客户端 脚本中,作为web服务方法 进行调用

            EnablePartialRendering:ture为激活UpdatePanel部分更新功能;

            LoadScriptsBeforeUI:指定脚本放在 返回的HTML页面的位置,如果放在«head»上,就会在加载UI之前加载脚本;
            ScriptMode:指定使用调试版 还是发布版 脚本;

            ScriptPath:指定脚本坐在目录;

            Services:包含 Web服务引用集合。


        UpdatePanel控件:

            属性:

                ChildrenAsTriggers:为true时,将子控件设为触发器(子控件可以更新UpdatePanel的内容);

                RenderMode:指定显示方式,UpdatePanelRenderMode.Block 或是 *.Inline。Block显示«div»,Inline显示«span»;

                UpdateMode:设为 Always (会在每个Ajax回送时,全部更新)或 Conditional(更新依赖于触发器);

                Triggers:指定AsyncPostbackTrigger 和 PostbackTrigger元素集合,指定了更新内容的时间(?)。

           

            ***************************************************

            使用UpdatePanel控件:

            1)添加ScriptManager控件:

                 建立站点,并在.aspx页面中添加控件。
                  «asp:ScriptManager ID="ScriptManager1" runat="server"»   «/asp:ScriptManager»
            2)添加UpdatePanel控件:
                 «asp:UpdatePanel ID="UpdatePanel1" runat="server"»     «/asp:UpdatePanel»

            3)在UpdatePanel内部添加标 签 和 按钮 控件:

                 «asp:UpdatePanel ID="UpdatePanel1" runat="server"»

                        «ContentTemplate»

                                «asp:Label ID="Label1" runat="server" Text="Label" »  «/asp:Label»

                                «asp:Button ID="Button1" runat="server" Text="AJAX Postback" /»

                        «/ContentTemplate»

                 «/asp:UpdatePanel»

       

            启动程序后,点击button,发送一个Ajax POST请求,而不是HTTP POST请求,只有UpdatePanel内的控件进行了刷新。页面内UpdatePanel控件之外的内容没有刷新。

            (Ajax POST请求使用XmlHttpRequest对象给服务器发送一个请求。服务器只返回更新UI所需数据。然后,JavaScript代码就修改UpdatePanel内部的HTML控件。

            一个页面可以有多个UpdatePanel。

            ********************************************************************

            使用触发器更新:

                当页面中有两组UpdatePanel控件时,在UpdatePanel控件的UpdateMode属性为Always时,无论点击那组控件中的按钮,两个组都会刷新。

                
                当UpdateMode属性为Conditional时,只用Button所在的UpdatePanel中的控件才会刷新;或者,用触发器可以更新其他UpdatePanel中的控件。
                    选择其中一个UpdataPanel,点击 Triggers属性旁边的"..." , 添加一个AsyncPostBack触发器,把ControlID设置为其他的按钮的ID,比如:Button2,把EventName设置为Click。  

                        通过上面的设置,当点击所指定的按钮时,就会更新这个UpdatePanel中的内容。

                            ......

                        «asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"»

                            «ContentTemplate»

                                «asp:Label ID="Label1" runat="server" Text="Label"» «/asp:Label»

                                «asp:Button ID="Button1" runat="server" Text="Button" OnClick="OnButtonClick"/»

                           «/ContentTemplate»   

                           «Triggers»

                                «asp:AsyncPostBackTrigger ControlID="Button2" EventName="Click"/»

                           «/Triggers»

                        «/asp:UpdatePanel»


        Timer控件:

            例:

                在UpdatePanel控件中添加 Label 和 Timer控件,并将Timer的Interal属性设为5000,给Tick事件添加OnTick方法。
                    protected void OnTick(object sender,EventArgs e)

                    {
                        Label1.Text = DateTime.Now.ToLongTimeString();

                    }

                    启动程序后,每5秒更新一次Label里的内容。


        UpdateProgress控件:

            当后台操作超时,超过DisplayAfter属性指定的世,就显示«ProgressTemplate»模板的内容。

            DisplayAfter默认500ms。

            例:
                «asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True"» «/asp:ScriptManager»

                «asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"»

                    «ProcessTemple»

                        Waiting......

                    «/ProcessTemplae»

                «/asp:UpdateProgress»

                   

                «asp:UpdatePanel ID="UpdatePanel1" runat="server"»

                    ........

                «/asp:UpdatePanel»

        *********************************************************************

        应用Ajax的web服务:

            1)建立站点后,添加一个Ajax的WCF服务(AJAX-enable WCF Service),命名为HelloService.svc,建立Web服务。

                    创建Ajax WCF服务,会在web.config中添加enableWebScript字段,给web服务添加JSON支持(这样web服务就能接受和返回 JavaScript客户端能使用的JSON对象了)。

                    «system.serviceModel»

                        «behaviors»

                            «endpointBefaviors»

                                «enableWebScript /»

                            «/endpointBehaviors»

                        «/behavior»

                        «serviceHostingEnvironment aspNetCompatibilityEnabled="true"»

                    ...............

                   

            2)在HelloService.svc中添加Greeting()方法:

                 using System.ServiceModel;

                 .....
                 [ServiceContract(Namespace=" ")]

                 [AspNetComatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

                 public class HelloService

                 {
                    [WebGet]

                    [OperationContract]

                    public string Greeting(string name)

                    {
                        return "Hello, "+ name;

                    }

                 }

            *************************************************************************************

           3)建客户端,建一个AJAX Web窗体CallService.aspx

                编辑aspx页面中的ScriptManager控件的属性,在属性编辑器中,点击Service属性的省略号按钮,add一个服务应用,把path属性改为HelloService.svc;

                    «asp:ScriptManager ID="ScriptManager1" runat="server"»

                        «service»

                            «asp:ServiceReference Path="HelloService.svc"»

                        «/service»

                    «/asp:ScriptManager»

               

                在页面上添加HTML控件;

       

                修改页面脚本块:

                «script type="text/javascript"»

                    var helloService;                
                    function pageload()
                    {
                        helloService = new HelloService();    //创建Web服务代理的实例。HelloService与ScriptManager的Service属性定义类型相同。

                        helloService.set_defaultSucceededCallback(helloSucceed);    //用代理对象的set_defaultSucceededCallback方法,指定异步调用web服务成功时调用函数 helloSucceed(在下面)。
                        helloService.set_defaultFailedCallback(heelFailed);    //用代理对象的set_defaultFailedCallback方法,指定异步调用web服务失败时调用函数 helloFailed(在下面)。

                    }


                    function helloSucceed(result)

                    {
                        var d = document.getElementById("result");

                        d.innerHTML = result;

                    }


                    function helloFailed(result)     {     .........     }

                    function callService()

                    {
                        var l = document.getElementById("input");

                        helloService.Greeting(l.value);    //用代理对象实例(helloService)调用web服务。可以添加一个HTML Button调用callService,来调用Web服务。

                    }


                «/script»

                除了使用set_defaultSucceededCallback和set_defaultFailedCallback方法 设置默认方法外,还可以:

                    helloService.Greeting(l.value, helloSucceed, helloFailed,null); //单独指定 传送的 成功 和 失败函数。

             *******************************************************************************************************************************
        用AJAX扩展控件:

              1)在www.asp.net/ajax/downloads下载ASP.NET AJAX控件工具集(AjaxControlToolkitFramework3.5-NoSource.zip),并解压缩。

              2)添加扩展控件:

                        在工具箱中,右击--选Add Tab;创建一个新类别,并命名;

                        右击新类别的内容,选Choose Item, 找到刚解压缩的程序集(AjaxControlToolkit.dll)
                        把ajaxToolkit tagPrefix添加到web.config中,引用程序集AjaxControlToolkit.

                             «pages»

                                «controls»

                                    «add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken="31BF3856AD364E35"" /»

                                    ........ 
                                    «add tagPrefix="ajaxToolkit" namespace="AjaxControlToolkit" assembly=“AjaxControlToolkit” /»

                                «/controls»

                            «/pages»

            3)在aspx页面中使用:

                    添加一个文本框,TextBox1,点击该控件的“智能标记”(把鼠标停在控件上,就会显示只能标记),从菜单中选Add Extender;
                    就会打开Extender Wizard,选择TextBoxWatermarkExtender(用来扩展)。

                    在文本框的属性编辑器中展开组 TextBox1WatermarkExtender,把WatermarkText属性设置成想显示的文本,比如:Enter your name之类的。

                        产生的代码如下:

                        «asp:TextBox ID="TextBox1" runat="server" »  «/asp:TextBox»

                        «ajaxToolkit:TextBoxWatermarkExtender ID="TextBox1_TextBoxWatermarkExtender" runat="server" Enabled="True" TargetControlID="TextBox1" WatermarkText="Enter your name"»

                        «/ajaxToolkit:TextBoxWatermarkExtender»
   

                        TargetControlID用来关联到指定的文本框--TextBox1上。

________________
                ***************************************部署Web 应用程序******************************************
17.ASP.NET运行库必须用IIS配置,才能运行ASP.NET Web应用程序。    
     用IIS管理工具检查处理程序映射,就可以验证ASP.NET运行库是否配置。

    其他信息见P601 & P602。

________________
18.IIS配置
        创建应用程序池(Application Pools):

        启动 IIS管理工具;
        选择Application pools右击,选择Add Application Pool;

        输入Name,选择程序.NET Framework version v2.0.50727,然后OK。

            ASP.NET 3.5 和 ASP.NET 2.0使用的运行库都是.NET Framework version v2.0.50727。

        创建Application poosl后,从IIS管理工具右边的Action类别中选择Application Pools(在vista界面中,其他不知道在哪儿选),就可以配置高级设置了。

        ************************

       创建Web应用程序:

       在IIS Manager中,选择Default Web Site;

       右击,选择Add Application;

       输入Web站点的物理路径 和 别名。选择创建好的Application Pool,然后,点OK;
       完成。

       配置好虚拟目录后,就可以发布Web站点了。

________________
19. 复制Web站点
        在VS中打开Web应用程序;

        在菜单中,点击 网站|复制网站(Website|Copy Web Site);

        点击窗口顶部的 连接(Connect)按钮,选择要复制的目的地。可以双向复制,进行同步。

              

       编译时在浏览器访问为文件时进行的。也可也使用.net运行库目录下的命令行工具aspnetc_compiler -v /BegVCSharpWebsite预编译站点BegVCSharpWebsite。

________________
20. 发布Web站点
        打开Web应用程序;

        在菜单选择 生成|发布网站(Build|Publish Web Site);

            配置选项:

            允许更新此编译站点:后台文件编译为程序集,前台用源码发布;

            使用固定命名和单页程序集:为每个页面创建一个程序集,程序集有固定名称,下次发布时不变。这个选项允许部分更新Web站点,更新或增加程序集。

            对编译程序集启用强命名:允许指定键文件,给程序集签名。

________________
21. 创建Window安装程序  
        如果,Web应用程序,需要共享程序集,就需要创建安装程序。

        使用安装程序的优点是,虚拟目录由IIS配置,不需要手动创建虚拟目录。

目录
相关文章
|
3天前
|
SQL 关系型数据库 分布式数据库
Doodle Jump — 使用Flutter&Flame开发游戏真不错!
用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...
|
11天前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
151031 3
|
9天前
|
数据采集 存储 运维
提升团队工程交付能力,从“看见”工程活动和研发模式开始
本文从统一工程交付的概念模型开始,介绍了如何将应用交付的模式显式地定义出来,并通过工具平台落地。
119978 55
|
10天前
|
监控 负载均衡 Java
深入探究Java微服务架构:Spring Cloud概论
**摘要:** 本文深入探讨了Java微服务架构中的Spring Cloud,解释了微服务架构如何解决传统单体架构的局限性,如松耦合、独立部署、可伸缩性和容错性。Spring Cloud作为一个基于Spring Boot的开源框架,提供了服务注册与发现、负载均衡、断路器、配置中心、API网关等组件,简化了微服务的开发、部署和管理。文章详细介绍了Spring Cloud的核心模块,如Eureka、Ribbon、Hystrix、Config、Zuul和Sleuth,并通过一个电商微服务系统的实战案例展示了如何使用Spring Cloud构建微服务应用。
103493 8
|
11天前
|
人工智能 Serverless 对象存储
让你的文档从静态展示到一键部署可操作验证
通过函数计算的能力让阿里云的文档从静态展示升级为动态可操作验证,用户在文档中单击一键部署可快速完成代码的部署及测试。这一改变已在函数计算的活动沙龙中得到用户的认可。
120731 199
|
10天前
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
10天前
|
存储 缓存 安全
深度解析JVM世界:JVM内存结构
深度解析JVM世界:JVM内存结构
|
17天前
|
人工智能 编解码 对象存储
一键生成视频!用 PAI-EAS 部署 AI 视频生成模型 SVD 工作流
本教程将带领大家免费领取阿里云PAI-EAS的免费试用资源,并且带领大家在 ComfyUI 环境下使用 SVD的模型,根据任何图片生成一个小短视频。
|
15天前
|
数据采集 运维 监控
DataphinV4.0来啦:自定义全局角色 ,实时研发覆盖全部署场景,个性化企业配置看本期
本次V4.0版本升级,Dataphin支持自定义全局角色、自定义逻辑表命名规范、Flink on K8s的部署模式,提升企业级适配能力,灵活匹配企业特色;将集成任务快速从组件模式切换为脚本模式、支持外部触发类型节点等,提升研发平台易用性,助力高效开发便捷运维。
90981 1