两个简单的Demo示例向读者展示Flash和ASP.NET交互原理以及过程

Flash 控件Demo .Net FrameWork 2.0 1.从工具箱导入flash.dll 2.flash资源切换 packFlash1.Movie = openFileDialog1.FileName; 3.接收flash指令,Cmd为Flash 发来的指令 packFlash1.FlashCall(cmd => { MessageBox.Show("hello "+cmd); }); 4.Flash.ocx 要附带在应用程序的根目录下,防止系统没有装Flash插件,自动注册 5.正常引用是不会报异常的,如果有异常,通常把 Interop.ShockwaveFlashObjects.dll, AxInterop.ShockwaveFlashObjects.dll, 放到根目录下就可以了 立即下载

 

ASP.NET与FLASH交互学习了ASP.NET的基础知识之后,终于等到学习交互的时候了。请大家和我一起来进行让人激动的交互吧!本章我将用两个简单的Demo示例向读者展示Flash和ASP.NET交互原理以及过程,请大家和我一起完成它,为了给下章成型示例打基础,学习操作ASP.NET对Cookie和Session的操作也是必不可少的。

10.1 用Visual Studio 2005创建ASP.NET程序

10.1.1使用Visual Studio软件返回字符串

接下来让我们尝试一下Visual Studio 2005中超级体贴、超级简单的读取数据方法。你只需轻点几下鼠标就可以完成以往繁重的手工编程:打开Visual Studio 2005 软件,在菜单栏选择“文件”→“新建”→“网站”,如图10.1所示:

图10.1

在弹出的类型选择框中,选择默认的“ASP.NET网站”,如图10.2 所示

图10.2

在选择框的左下方有文件保存的位置,默认是“我的文档”的文件夹里,鉴于一般读者的“我的文档”都放在系统盘内,重新恢复系统会清空文件。强烈建议读者把文件保存在一个不易丢失的位置;语言我们选择C#,如图10.3所示:

图10.3

一阵读写磁盘的噪音之后,终于出现编辑界面。我们会看到最右侧的解决方案管理器内出现了“解决方案 WebSite1 (1个项目)”的标识,如果读者没有看到“解决方案资源管理器”面板,可以在菜单上点击“视图”→“解决方案资源管理器”,使之出现。

点击Default.aspx左边的+号图标展开节点,可以发现Default.aspx下包含Default.cs 。这就是Default.aspx的逻辑代码,可见Visual Studio 2005在样式与逻辑分离工作方面做的相当人性化。如图10.4所示:

图10.4

接下来我们就测试一下刚才安装的软件和配置的环境是否成功。首先在Default.aspx左下角选择“设计”的编写方式,如图10.5所示:

图10.5

把鼠标放在左侧偏上的“工具箱”按钮上,编辑区将滑出工具箱菜单。如图10.6所示:

图10.6

第一次打开工具箱的读者肯定会被Visual Studio 2005庞大的工具箱吓坏,工具箱里的工具称为“控件”,其作用与Flash提供的“组件”极其类似。但Flash中组件的数量与Visual Studio 2005的控件数量相比,很明显是小巫见大巫。在这个例子中,我们需要把一个Label控件拖到编辑区,拖动完毕,单击填加的控件,编辑区的效果如图10.7所示:

图10.7

在“属性”窗口里(如果没有看到,可以在“视图”-“属性窗口”中打开)我们可以浏览及更改这个Label控件的属性,如图10.8所示:

图10.8

图10.8表示,Label控件的默认值是Label,id是Label1,你可以自行更改,本例中,我让它的默认值为空,id修改为myLB。

双击Label控件,自动进入页面的逻辑代码Default.aspx.cs如图10.9所示:

图10.9

解释一下:上面的using System; 等一系列代码,指的是导入命名空间。Flash 8中的import用法与之类似,在ASP.NET中,如果使用某个类,必须导入此类的命名空间,例如,你要操作XML对象,则要在加一行 using System.Xml;

接下来是对类的定义,我们这个Default.aspx页面引用的是“_Default类”,它属于System.Web.UI的Page子类。其子节点包含一个受保护的事件 Page_Load(当页面被载入时)。我们可以在代码块中间填写想要实现的效果,例如让Label1控件显示“Hello World!”的代码是

myLB.text= "Hello World! ";

加入代码后,点击“文件”→“保存Default.aspx.cs”,然后切换到Default.aspx的编辑页面,点击“文件”→“保存Default.aspx”。

保存完毕之后点击“文件”→“在浏览器中查看”,即可调试页面。效果如图10.10所示:

图10.10

10.1.2配置数据源连接数据库

第二个例子我们要连接刚才创建的数据库,并让数据表中的字段值显示在页面中。在这之前,我们有必要了解一下Visual Studio 2005中的数据组件:首先,把鼠标放到左上角“工具箱”按钮上,选择点击“数据”选项卡,你将会看到很多数据控件,如图10.11所示:

 

图10.11

我们要用到的控件是SqlDataSource和GridView。其中SqlDataSource控件的作用是连接SQL Server数据库,并生成查询语句,而GridView则被用做显示返回的数据。

在“解决方案资源管理器”中的地球图标上点右键,选择“填加新项”,如图10.12所示。在弹出的命名窗口中,填写新页面的名字,本例中使用showData.aspx

图10.12

首先把showData.aspx页面编辑方式切换为“设计”,然后在工具箱内的“数据”选项卡里把一个SqlDataSource控件拖入showData.aspx页面,SqlDataSource控件会要求你配置数据源,如图10.13所示:

图10.13

点击“配置数据源”文字连接,将弹出“配置数据源”选项卡,如图10.14所示:

图10.14

我们单击“新建连接”按钮,弹出如图10.1.15的选项卡,我们选择第三项,Microsoft SQL Server,按继续:

图10.15

在弹出的“填加连接”选项卡中,我们点击“服务器名”的下拉菜单,经过几秒钟的读取,会出现两个,第一个是“SQL Server”,因为我们利用的是Visual Studio 2005自带的数据库引擎精简版:“SQLEXPRESS”,并没有安装SQL Server,所以你要选择第二项,如图10.16所示:

图10.16

选择第二项之后,在下边的验证方式里选择“使用SQL Server身份验证”,在用户名中和密码中填写你设定的值,本例中用户名是myTester,密码是abcdefg。如图10.17所示:

图10.17

下面的“连接到一个数据库”选项卡内的下拉菜单被激活,点击下拉菜单,选择我们建立的数据库myTesterDB,如图10.18所示:

图10.18

点“确定”按钮,又是一阵硬盘读取声,几秒之后,回到了“配置数据源”窗口,我们刚才连接的数据源已经显示在“配置数据源”窗口中,如图10.19所示:

 

图10.19

点击“下一步”按钮。在弹出的选项卡中选择将此连接保存到“应用程序配置文件中”。以后再连接数据库时只需要鼠标在这个下拉菜单中点选就直接使用,免掉很多重复步骤。

10.1.3 体贴的SQL语句选择功能

在保存数据连接之后,接着点“下一步”,进入配置Select语句选项卡中。Visual Studio 2005在这一步中简化了开发者的工作,我们可以通过简单的鼠标选取来构造SQL语句。

本例中我选择了myTable表,并选取了myUsername字段、myPoints字段和selfIntro字段,如果我想对这些数据加上限定条件,则可以点击“WHERE……”按钮,如果我想对返回的值排序,可以点击“ORDER BY……”按钮。选定后在SELECT语句框中出现如图10.20所示的语句:

图10.20

在这个例子中我希望对数据进行排序,按照myPoints的降序。点击“ORDER BY……”按钮,如图10.21所示:

 

图10.21

按“确定”,即可看到按照刚才要求生成的SQL语句,如图10.22所示:

图10.22

10.1.4利用控件读取SQL Server数据库中的值

本节我们将利用Visual Studio 2005中的控件显示数据库中的值,接着点击“下一步”按钮,按“测试查询”按钮,可以立即看到刚才设定的效果,这是个相当体贴的功能!。如图10.23所示:

图10.23

测试无误,点击“完成”按钮,结束配置数据源。接下来,我们在Default.aspx的“设计”模式下,拖入一个GridView控件(功能类似于Flash里的DataGrid组件),点击“选择数据源”的下拉菜单,选择我们刚才创建的数据源,如图10.24所示:

图10.24

保存页面,然后“文件”→“在浏览器中查看”,就会得到如图10.25所示的效果,整个过程,基本没打一行代码!微软编辑器的亲和力果然厉害!如果你观察仔细,还会发现,在GridView下部竟然还有便捷的分页功能!!!

 

图10.25

我用两个示例向你演示了Visual Studio 2005软件和SQL数据库的无缝嵌合,事实上,在Flash和ASP.NET的通信中,我们只是让ASP.NET动态的生成XML文件,然后通过Flash对XML的遍历获得结果显示给读者。

ASP.NET是一种完全面向对象编程的优秀语言,Flash ActionScript 2.0编程思想也与之类似。类库是编程的基本条件,一切实例均是某类的实例,而ASP.NET的类库具有5000余个类,本书不能一一介绍,只能针对Flash RIA比较有用的传值、数据库相关介绍。

10.2 两个Demo示例

10.2.1 Demo示例(1):读取ASP.NET返回的值

本节我们将讲解用Flash与ASP. NET交互的基本知识。首先我们在“解决方案资源管理器”面板内的地球标识上点右键,选择“填加新项”,在弹出的命名选项卡中,我们给页面命名为load.aspx,同上节一样,填加之后点击页面左边的+号,即可展开其逻辑代码load.aspx.cs。进入load.aspx的编辑界面,在左下角选择“源”的编辑方式。把除第一句以外的所有代码都删除,第一句修改如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="load.aspx.cs" Inherits="load" CodePage="65001"%>

解释一下这句代码,在ASP章已经学过,一个完整的ASP页包含若干“声明”:文档类型声明、编码声明等等。本句就是ASP.NET中的声明:“<%” 表示HTML页面中ASP.NET代码的开始“%>”表示HTML页面中ASP.NET代码的结束。其他声明的解释如下表:

ASPX页声明

解释

@Page Language="C#"

表示页面后台语言是C#

AutoEventWireup="true"

绑定事件功能开启(可以用”Page_Init”和”Page_Load”事件)

CodeFile="load.aspx.cs"

逻辑代码是load.aspx.cs

Inherits="load"

引用类load

CodePage="65001"

编码方式UTF-8

由于我们通过XML和Flash交互,所以我们删除了load.aspx中所有的HTML代码,让逻辑代码包办一切输出行为。进入逻辑代码load.aspx.cs,并开始构造思路:我们想让Flash用loadVariables,LoadVars.load和XML.load向load.aspx提出请求,利用myMethod这个GET参数,作为不同请求的标识。load.aspx把参数值送交逻辑层分析选择,最后由逻辑层负责返回相应的结果:

1.    如果myMethod值为空,则load.aspx返回字符串:请求为空。

2.    如果myMethod值为loadvariables,则load.aspx返回字符串:theValue=这个方式是loadVariables!

3.    如果myMethod值为loadvars,则load.aspx返回字符串:“theMethod=这个方式是loadVars&theData=利用字符串Flash与ASP.NET通信”

4.    如果myMethod值为xml,则返回一个XML文档:“<?xml version='1.0' encoding='utf-8'?><data method='这个方式是xml'>利用XML,Flash与ASP.net通信</data>”

看过上面的思路分析,学过程序设计的读者几乎都会选择switch语句:这种分支选择问题,switch语句最为方便,思路也最清晰。下面是逻辑代码:

/*--------------------------------------------------------------------------------------------------------------------------------

以下诸句表示的是导入命名空间,每个页面被创建时,Visual Studio软件自动为我们创建的,如果我们还需要处理其他类的实例,可以导入其他命名空间

---------------------------------------------------------------------------------------------------------------------------------*/

    using System;

    using System.Data;

    using System.Configuration;

    using System.Collections;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

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

{

//你应该记得load.aspx中引用的是load类,在此处我们来定义它

    protected void Page_Load(object sender, EventArgs e)

{

//因为load.aspx中,AutoEventWireup属性被设置为true,所以我们可以使用Page_Init和Page_Load事件,Page_Load是当页面被载入时触发的事件

/*---------------------------------------------------------------

以上诸行代码是编程常用的switch语句,在多条件的选取中,它结构清晰不易混乱。

本例中,我对由GET方式提交过来的myMethod进行选择判断。在ASP.NET中,外部提交的数据,可以按Request["myMethod"]这样的形式接收。

---------------------------------------------------------------*/

        switch (Request["myMethod"])

        {

            case "":

                Response.Write("请求为空");

                break;

            case "loadvariables":

                Response.Write("theValue=这个方式是loadVariables!");

                break;

            case "loadvars":

                Response.Write("theMethod=这个方式是loadVars&theData=利用字符串Flash与ASP.NET通信");

                break;

            case "xml":

                Response.Write("<?xml version='1.0' encoding='utf-8'?><data method='这个方式是xml'>利用XML,Flash与ASP.net通信</data>");

                break;

            default:

                Response.Write("请求为空");

                break;

        }

    }

}

保存,在浏览器中查看将得到图10.26 – 10.29所示:

图10.26

图10.27

图10.28

图10.29

       * 注:这个例子的源文件,在附带光盘下:源文件\第十章\1\load.aspx和load.aspx.cs

从结果来看,测试是成功的!!!接下来该做Flash的部分了,废话不说,打开Flash Professional 8软件,趁它疯狂读硬盘的时候,我们放松一下大脑,顺便来设计一下Flash的设计思路。

10.2.2在Flash中用三种方式显示ASP.NET返回的值

类似于前面的例子,我们仍然用一个ComboBox组件来选择读取方式,用一个TextArea组件来显示结果。

首先我们用dataProvider给ComboBox填充文字和初始值,最后给它增加监听器,使之一旦改变,switch函数就执行判断,并执行相应函数。代码如下:

//声明myComboBox为一个新的ComboBox组件

var myComboBox:mx.controls.ComboBox;

//声明myTextArea为一个新的TextArea组件

var myTextArea:mx.controls.TextArea;

//给myComboBox增加数据源

myComboBox.dataProvider = [{data:0, label:"点击选择"}, {data:1, label: "loadVariables方式"}, {data:2, label: "loadVars方式"}, {data:3, label: "XML方式"}];

/*---------------------------------------------------------------------------------------------------------------------------------

为myComboBox组件增加监听事件,从这你应该看出第一章学习Flash监听机制的好处。Switch语句被用在Flash里判定myComboBox组件变化后的值:如果值为1,则用loadVariables方法,如果值为2,则用loadVars方法,如果值为3则用XML.load方法

--------------------------------------------------------------------------------------------------------------------------------*/

//为myComboBox定义监听函数

var listenerObject:Object = new Object();

//当myComboBox改变选项时

listenerObject.change = function(eventObject:Object) {

       //选择comboBox的值

    switch(eventObject.target.value){

              //如果是1,执行firstMethod方法

              case 1: firstMethod();break;

              //如果是2,执行secondMethod方法

              case 2: secondMethod();break;

              //如果是3,执行thirdMethod方法

              case 3: thirdMethod();break;

              //默认情况什么都不做

              default:0;break;

       }

};

//为myComboBox增加监听函数

myComboBox.addEventListener("change", listenerObject);

/*-----------------------------------------------------------------------------------------------------------------------------

由于loadVariables没有onLoad触发事件,所以我们只能不停的利用setInterval一次次的使用checkIt函数检测,一旦读入的_root.theValue值不为空,才删除setInterval,显示读到的值

------------------------------------------------------------------------------------------------------------------------------*/

function firstMethod():Void{

       loadVariables("load.aspx?myMethod=loadvariables",_root, "GET");

       function checkIt() {

    if (_root.theValue == undefined) {

    myTextArea.text = "Loading... ";

    } else {

    myTextArea.text = _root.theValue;

    clearInterval(myInterval);

 }

}

var myInterval:Number = setInterval(checkIt, 100);

}

//定义secondMethod函数

function secondMethod():Void{

       //myTextArea组件显示“Loading……”字符串

       myTextArea.text = "Loading... ";

       //建立myLoadVars为一个新的LoadVars对象

       var myLoadVars:LoadVars = new LoadVars();

       //定义myLoadVars的onLoad函数

       myLoadVars.onLoad = function(success:Boolean):Void{

              //如果读取成功

              if(success){

                     //在myTextArea显示myLoadVars的theMethod属性和theData属性

                     myTextArea.text=myLoadVars.theMethod+"\n\n"+myLoadVars.theData;

              }else{

                     //如果读取失败,现在错误信息

                     myTextArea.text = "文件传输错误";

              }

       }

       //myLoadVars读取同目录下的文件,为了防止读取缓存,在地址后加了一个随机数。

       myLoadVars.load("load.aspx?myMethod=loadvars&temp="+Math.random());

}

//定义第三种方式thirdMethod,也就是XML读取

function thirdMethod():Void{

       //myTextArea组件显示“Loading……”

       myTextArea.text = "Loading... ";

       //声明myXML为一个新的XML对象

       var myXML:XML = new XML();

       //声明myXML忽略空白节点

       myXML.ignoreWhite=true;

       //定义myXML的onLoad函数

       myXML.onLoad =function(success:Boolean):Void{

              //如果读取成功

              if(success){

                     //myTextArea组件显示myXML的值

                     myTextArea.text = myXML.toString();

              //如果读取失败

              }else{

                     //显示错误信息

                     myTextArea.text = "文件传输错误";

              }

       }

       //myXML读取同目录下的文件,为了防止读取缓存,在地址后加了一个随机数。

       myXML.load("load.aspx?myMethod=xml&temp="+Math.random());

}

*注:这个例子的源文件,在附带光盘下:源文件\第十章\1\4-1-1.fla,版本为Flash 8,请勿用低于Flash 8版本软件打开。

注意:这个例子我们为了兼顾扩展性,采取了相对路径,所以要把SWF文件导出到和load.aspx页面同一层文件夹内。我建议,所有源文件最好都层级有序地放入同一个顶层文件夹内。这样更有利于你对整个工程的支配。

图10.30为我解决方案管理器的截图:

图10.30

在浏览器中以虚拟路径访问4-4-1.html或4-4-1.swf都可以显示本例效果。图10.31为展开myComboBox但尚未选择的效果:

图10.31

图10.32所示为选择loadVariables选项时的效果:

图10.32

图10.33所示为选择loadVars选项时的效果:

图10.33

图10.34所示为选择XML选项时的效果:

图10.34

10.2.3 Demo示例(2)利用Flash读取SQL Server数据库的值(1)

本节我们来练习用Flash读取SQL Server数据库中的值,思路如下:用ASP.NET连接读取数据库,并生成XML列表,Flash去读取XML列表并且格式化结果显示在组件中。

    在Visual Studio 2005“解决方案资源管理器”的地球图标上点右键,选择“添加新项”,在弹出的窗口将之命名为xml_list.aspx,稍等片刻,工作区将自动转向该页面,同时在“解决方案资源管理器”内xml_list.aspx下可以展开其逻辑代码xml_list.aspx.cs。因为输出文档类型为text/xml,所以我们把list.aspx除第一行以外的所有代码都删除,且增加两个参数,修改后第代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xml_list.aspx.cs" Inherits="xml_list" ContentType="text/xml" CodePage="65001"%>

    保存为xml_list.aspx即可,新手朋友还可以再增加一个参数 debug=true,这样在程序出错时就会有具体的错误提示,不过记得,发布之前删除为好。接着双击xml_list.aspx.cs进入逻辑代码,把以下代码输入到文件中:

    using System;

    using System.Data;

    using System.Configuration;

    using System.Collections;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

//引入SQL命名空间,这是使用SQL Server 客户端必需的

using System.Data.SqlClient;

//定义被引用的xml_list类

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

{

       //声明公有变量sql

        public string sql;

        protected void Page_Load(object sender, EventArgs e)

        {

            //设定strConnection为数据库连接字符串

        string strConnection = "Data Source=(local)\\SQLEXPRESS;Initial Catalog=myTesterDB;User ID=myTester;Password=abcdefg; ";

        //建立一个SQL连接,连接字符串strConnection作为一个参数

        SqlConnection objConnection=new SqlConnection(strConnection);

        //连接应处于“打开“状态,否则一切操作都是徒劳的。

        objConnection.Open();

              //设置SQL语句,读取myTable中的5条数据

        sql = "SELECT top 5 * FROM [myTable] ORDER BY [myPoints] DESC+ ";";

        //建立一个SQL命令对象,它有两个参数:第一个是命令即SQL语句,第二个是连接名

        SqlCommand cmd = new SqlCommand(sql,objConnection);

       //ASP.NET最快的读取方式:SqlDataReader,与ASP中的“1,1”有些类似,都是快速的,只读的

        SqlDataReader dr = cmd.ExecuteReader();

        //输出XML头,XML根节点设置,其中包括:总记录数、总页数、当前页、管理状态

        Response.Write("<?xml version='1.0' encoding='utf-8'?><数据>");

         //while(dr.Read)相当与“有符合的记录就执行一次”,类似于ASP的rs.MoveNext+LOOP

               while(dr.Read()){

            /*---------------------------------------------------------------------------------------------------------------------

每读取一次就输出一个子节点,类似于ASP要读取RecordSet中的name值用rs("name")一样,ASP.NET要读取DataReader中的name值,用dr["name"];

---------------------------------------------------------------------------------------------------------------------*/

            Response.Write("<资料 用户名='"+dr["myUsername"]+"' 积分='"+dr["myPoints"]+"'介绍='"+dr["selfIntro"]+"'/>");

        }

        //输出XML结尾

        Response.Write("</数据>");

        //释放连接所耗资源

        objConnection.Dispose();

        //连接关闭

        objConnection.Close();

        //释放命令所耗资源

        cmd.Dispose();

        //释放DataReader所耗资源

        dr.Dispose();

        //DataReader关闭

        dr.Close();

    }

}

保存文件为xml_list.cs,在“解决方案资源管理器”中浏览xml_list.aspx效果如图10.35所示:

图10.35

       * 注:该示例的源文件在光盘 第十章\2\xml_list.aspx和xml_list.cs

10.2.4 Demo示例(2)利用Flash读取SQL Server数据库的值(2)

本节只需利用Flash读取ASP.NET取回的XML值即可完成一个简单的交互示例。在Flash软件中新建一个文档,拖入主场景一个TextArea组件,并命名为myTextArea,它用来显示结果,在Flash文档的动作面板中输入以下代码:

var myTextArea:mx.controls.TextArea;

var myXML:XML=new XML();

myXML.ignoreWhite=true;

myXML.onLoad=function(success:Boolean):Void{

       if(success){

              var root:XMLNode=this.firstChild;

              for(var i:Number=0;i<root.childNodes.length;i++){

                     myTextArea.text+="用户名:"+root.childNodes[i].attributes.用户名+"\t";

                     myTextArea.text+="积分:"+root.childNodes[i].attributes.积分+"\t";

                     myTextArea.text+="介绍:"+root.childNodes[i].attributes.介绍+"\t";

                     myTextArea.text+="\n\n";

              }

       }

}

myXML.load("http://localhost:38960/WebSite1/xml_list.aspx ");

保存文件,调试代码,效果如图10.36所示:

图10.36

       * 注:此示例的源文件在 第十章\2\xml_list.fla

10.3 ASP.NET的Cookie和Session

10.3.1 ASP.NET中的Cookie

通过上一部分的学习,我们已知道:Cookie是ASP中的一个对象集合,它以加密的形式被保存在客户端特定文件夹内,用户可以修改、删除甚至伪造Cookie;而Session是一个服务器对象,它被保存在服务器,所以相对地,使用Session较为安全,但较耗费服务器资源。你可以随意设置Cookie的生存期,例如1年。但如果你让一个Session变量始终生存在服务器主机内,对你的服务器来说并不是一个好的选择,通常来讲,涉及到“管理权限”的时候才会用Cookie+Session双认证。

首先我们还是在ASP.NET中练习写入和读取Cookie和Session,了解一些Cookie的基本知识:Cookie对象是.NET Framework中HttpCookie类实例化的模型。下面我们来学习ASP.NET中与Cookie密切相关的一些方法:

1.         如何建立Cookie:ASP.NET建立Cookie的标准代码写法是

HttpCookie myCookie = new HttpCookie("someCookie");

这句代码建立了一个名为myCookie的Cookie对象

2.         接收Cookie对象:接收ASP.NETCookie对象的标准代码写法是

HttpCookie getCookie = Request.Cookies["someCookie"];

设置getCookie为一个Cookie对象,它是请求页面中Cookie对象数组中someCookie的子集。如果名为someCookie的Cookie数组不存在,则getCookie的null属性为true。

3.         给Cookie增加键值:ASP.NET增加键值的标准代码写法是

myCookie.Values.Add("auth", "admin");

给名为myCookie的Cookie对象(必须实现建好)增加一个auth键名,其值为admin。

       4.    附加键值,使Cookie生效:标准代码格式为

              Response.Cookies.Add(myCookie);

上句代码把名为myCookie的对象附加到Cookie数组内。注意,在设定Cookie完毕之后一定要加上这句代码才能生效,

4.         设定生存期:设置生存期的标准代码形式如下

myCookie.Expires = DateTime.Now.AddDays(3);

设定名为myCookie的Cookie对象生存期为当前时间加上3天。需要注意的是,设定Cookie之后如果页面不刷新,是不会显示任何效果的。

5.         获取Cookie的值:获取Cookie值的标准代码格式为

myCookie.Values["auth"];

上句代码可以获取名为myCookie的Cookie对象键名为auth的键值。如果不存在,则返回null。

10.3.2 ASP.NET中练习使用Cookie

在Visual Studio 2005“解决方案资源管理器”内的地球图标点右键→“添加新项”,在弹出的窗口中把文件名命名为Cookie.aspx,按“确定”按钮,片刻之后,“解决方案资源管理器”里便出现了新添加的页面文件Cookie.aspx和逻辑文件Cookie.cs。我们首先在HTML状态下弄懂ASP.NET Cookie的使用方法,只要原理弄懂,在Flash RIA工程中只要使输出文档类型由HTML变为XML就万事大吉了。

为了增加读者的实际动手能力,我们在示例中选用了一个广为人知“BBS登录系统”,相信所有泡过BBS论坛的朋友对此都不陌生

图10.37所示为国内Flash门户网站“闪吧 http://www.flash8.net”的登录系统,这个登录系统主要包含几个部分:“用户名、密码”输入框、“有效期”下拉菜单,“登录”按钮。上述一切都被包含到一个表单标签中,一旦“登录”按钮被按下,输入框和下拉菜单中的值就会以POST的方式提交给后台页面加以验证。

图10.37

我们为了模拟这种效果,需要在Visual Studio 2005的“工具箱”中向工作区拖入一个Panel组件(ID命名为myPanel)、两个TextBox组件(ID分别命名为myUID和myPWD)、一个Button组件(ID命名为myBTN)、一个DropDownList组件(ID命名为myDDL)和一个LinkButton组件(ID命名为myLB)。并且我们需要把 除LinkButton以外的其他组件都拖入Panel内。Panel是“群组”组件,其他组件一旦被拖入Panel组件,我们就可以通过控制Panel组件统一管理被它包含的组件。例如,在本例中只需写一句 myPanel.Visible = false;就可以让所有包含在myPanel组件中的所有组件不可见。在myUID和myPWD组件的前面分别添加提示文字:“用户名”和“密  码”;在myLB的“属性窗口”中添加它的Text属性为“退出系统”;单击myDDL组件,在右侧“属性窗口”里找到“杂项”→Items表格,单击(collection)右侧的“...”按钮,为myDDL下拉菜单绑定数据源(这和Flash里的ComboBox很像),如图10.38所示:

图10.38

在弹出的窗口,按图10.39所示填写:

图10.39

其中我们可以通过“添加”一个选项、每个选项都右4个属性Enabled(是否可以选择)、Selected(是否默认就处于“被选中”状态。注意:最多只能有一项可以设置为“true”)、Text(下拉列表的文字)、Value(下拉列表的值)。四个成员的属性设置如下表所:示

        ID属性

成员

Enabled

Selected

Text

Value

0

True

True

不保存

no

1

True

False

一天

oneday

2

True

False

一周

oneweek

3

True

False

一个月

onemonth

各组件摆放位置如图10.40所示:

图10.40

页面文件编辑完毕,下面我们该考虑如何编写逻辑文件,思路如下:

每当页面被加载时,逻辑文件首先判定本页是被POST方法请求而访问的,还是被直接访问的。如果是前者,则要接收POST方法传过来的用户名和密码值,并与正确值对比;一旦用户名和密码值错误,则清空所有Cookie,返回本页;如果用户名密码正确,则赋予浏览者相应的Cookie及有效期。按下“退出系统”按钮,后台逻辑脚本负责清空上一Cookie。在“解决方案资源管理器”中双击逻辑文件Cookie.cs,如图10.41:

 

图10.41

10.3.3 Cookie.aspx的逻辑代码

在Cookie.cs中输入以下代码:

/*--------------------------------------------------------------------------------------------------------------------------------

以下诸句为Visual Studio 2005 创建每个逻辑文件而自动生成的代码,即引用了可能在编程中使用的一些类,这和Flash类文件中的“import ……”很相似:引用类的实例之前必须要事先引用类。

---------------------------------------------------------------------------------------------------------------------------------*/

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

/*--------------------------------------------------------------------------------------------------------------------------------

下句也是软件自动生成的代码,默认情况下,你的.aspx的前缀叫什么名,就引用逻辑文件的什么类,本例Cookie.aspx即引用Cookie类,冒号代表左边是右边的子类。本例中Cookie类属于System.Web.UI.Page的子类。

---------------------------------------------------------------------------------------------------------------------------------*/

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

{

/*--------------------------------------------------------------------------------------------------------------------------------

因为我们要接收用户名、密码、Cookie生存期的值,所以必须事先声明变量。我们分别声明了两个“string”字符串类型变量:uid和pwd和int整形变量exp_time。为了防止浏览器读取可恶的缓存,我们还要声明一个随机数作为URL地址后面的随机参数。

---------------------------------------------------------------------------------------------------------------------------------*/

    private string uid;

    private string pwd;

    public int exp_time;

    Random r = new Random();

/*-----------------------------------------------------------------------------------------------------------------

下句为Visual Studio 2005 软件自动生成的代码,前边我们提到过Page_Load是一个触发事件,即“当页面被加载”。它在当页面文件第一句AutoEventWireup为true时可以被逻辑文件使用。一旦我们需要有在页面加载时初始化的设置时统统可以写在这个代码块内。

------------------------------------------------------------------------------------------------------------------*/

    protected void Page_Load(object sender, EventArgs e)

    {

    /*-----------------------------------------------------------------------------------------------------------------

以下前两句分别声明了两个HttpCookie类的实例:myCookie(用于存储Cookie)和Cookie(用于读取Cookie),someCookie是本例Cookie的名称。由于默认情况下浏览者是未登录的,所以根本谈不上退出系统,myLB组件的Visible(可见性)属性当然也要设置为false,以上是初始化代码。

------------------------------------------------------------------------------------------------------------------*/

        HttpCookie myCookie = new HttpCookie("someCookie");

        HttpCookie Cookie = Request.Cookies["someCookie "];

        myLB.Visible = false;

        if (!IsPostBack)

/*-----------------------------------------------------------------------------------------------------------------

注意:上面的代码比较常用,意为 “如果(不是 被POST方式提交的)”,它被用于判断本页面是否为被“POST”方法。如果本句返回“true”,则不是被“POST”请求方式提交的。

        ------------------------------------------------------------------------------------------------------------------*/

        {

        //如果本页Cookie对象不为空,则向下进行

            if (Cookie != null)

        //如果本页Cookie对象名为auth的值为admin

            {

                if (Cookie.Values["auth"] == "admin")

//返回登录信息,群组面板不可见,LinkButton组件可见

                {

                    Response.Write("你已登录系统");

                    myPanel.Visible = false;

                    myLB.Visible = true;

                } 

            }

            else

            {

        //如果没有登录成功,则群组面板可见

                myPanel.Visible = true;

            }

        }

        else

//如果!IsPostBack的结果为false,即本页是POST请求过来的

        {

//uid变量的值为myUID输入框的值

                uid = Request.Form["myUID"];

//pwd变量的值为myPWD输入框的值

                pwd = Request.Form["myPWD"];

/*---------------------------------------------------------------------------------------------------------------------------------

如果uid和pwd的值分别满足我们设定的值,则执行以下代码。注意:为了让新手理解思想,我在这里没有连接数据库取出用户“lau”的密码,而是直接赋值。

-------------------------------------------------------------------------------------------------------------------------------*/

                if (uid == "lau" && pwd == "abcdefg")

                {

                                //声明一个字符串变量exp,它被用做接收myDDL组件选择的生存期

                    string exp = myDDL.SelectedItem.Value;

//利用switch函数选择exp变量的值

                    switch (exp)

                    {

//如果用户选择的是第一项不保存,则exp_time的值为0

                        case "no": exp_time = 0; break;

//如果用户选择的是第一项“一天”,则exp_time的值为1

                        case "oneday": exp_time = 1; break;

//如果用户选择的是第一项“一周”,则exp_time的值为7

                        case "oneweek": exp_time = 7; break;

//如果用户选择的是第一项“一个月”,则exp_time的值为30

                        case "onemonth": exp_time = 30; break;

//默认情况,如果都没有选,则exp_time的值为0

                        default: exp_time = 0; break;

           }

//myCookie这个集合填加一个名为“auth”,值为“admin”的 Cookie

           myCookie.Values.Add("auth", "admin");

/*---------------------------------------------------------------------------------------------------------------------

如果“exp_time”的值“不为零”,则myCookie的生存期为从现在到增加的天数。注意:DataTime.Now方法可以返回当前时间,AddDays方法可以增加相应天数实际应用中你还可以使用其他方法使Cookie生存期精确到分和秒

--------------------------------------------------------------------------------------------------------------------*/

        if(exp_time!=0){

                myCookie.Expires = DateTime.Now.AddDays(exp_time);

     }

/*--------------------------------------------------------------------------------------------------------------------

Response类的Cookies对象集合增加一个新的成员myCookie,注意:只有有这句代码,以上的Cookie设定才有效。

--------------------------------------------------------------------------------------------------------------------*/

         Response.Cookies.Add(myCookie);

/*-------------------------------------------------------------------------------------------------------------------

设定Cookie之后,我们将刷新页面,为了使页面不读缓存,可以在本页URL

后面加一个GET参数,它是0-9999中任意一个整数

--------------------------------------------------------------------------------------------------------------------*/

         Response.Redirect("Cookie.aspx?rand=" + r.Next(10000));

             } 

        }

    }

    /*------------------------------------------------------------------------------------------------------------------

这个代码块是为“退出登录”这个文本按钮增加动作。注意:这个代码块是一个事件触发事件,你必须在.aspx页面的相应位置定义它。例如,返回到Cookie.aspx,把myLB组件的标签修改为:

<asp:LinkButton ID="myLB" runat="server" OnClick="myLB_Click">退出系统</asp:LinkButton>;还有一种更简单的“自动生成”办法:只要你回到Cookie.aspx的“设计”状态,双击myLB组件就可以看自动添加并转到本代码块,你只需要在代码块中填加以下代码:

--------------------------------------------------------------------------------------------------------------------*/

    protected void myLB_Click(object sender, EventArgs e)

    {

    /*--------------------------------------------------------------------------------------------------------------

声明myCookie为名为auth的Cookie,且此Cookie的生存期为现在(立刻过期),清除Cookie之后,页面被重定向至本页,URL带有一个在0-9999的随机数

---------------------------------------------------------------------------------------------------------------*/

        HttpCookie myCookie = new HttpCookie("auth");

        myCookie.Expires = DateTime.Now;

        Response.Cookies.Add(myCookie);

        Response.Redirect("Cookie.aspx?del=true&rand=" + r.Next(10000));

    }

}

10.3.4 编写Cookie.aspx页面文件

在“解决方案资源管理器”中双击Cookie.aspx,写入代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile=

"Cookie.aspx.cs" Inherits="Cookie" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

<head runat="server">

<title>Cookie测试</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<asp:Panel ID="myPanel" runat="server" Height="89px"

Width="260px">

用户名:<asp:TextBox ID="myUID" runat="server">

</asp:TextBox>&nbsp;<br />

密 &nbsp; 码:<asp:TextBox ID="myPWD" runat="server" TextMode=

"Password"></asp:TextBox>&nbsp;<br/>

<asp:DropDownList ID="myDDL" runat="server">

<asp:ListItem Selected="True" Value="no">不保存</asp:ListItem>

<asp:ListItem Value="oneday">一天</asp:ListItem>

<asp:ListItem Value="oneweek">一周</asp:ListItem>

<asp:ListItem Value="onemonth">一个月</asp:ListItem>

</asp:DropDownList><br/>

<asp:Button ID="myBTN" runat="server" Text="submit" />

</asp:Panel>

<asp:LinkButton ID="myLB" runat="server" OnClick=

"myLB_Click">退出系统</asp:LinkButton></div>

</form>

</body>

</html>

执行效果如图10.42所示:

图10.42

当输入正确的用户名和密码之后转向的随机页面如图10.43所示:

图10.43

* 注:这个示例的源文件在附带光盘下 第十章\3\cookie.aspx和cookie.aspx.cs

注意:只要你没有清空Cookies,此Cookie在其整个生存期都有效,你不妨重新打开浏览器试试效果。Cookie给我们带来很大方便,例如:在制作Flash留言本时,如果某些留言是只有高级会员才能观看的,我们就可以用ASP.NET检测客户端Cookie,如果存在并且满足观看权限,则生成其完整信息的XML信息,反之则生成受限制的XML信息。

10.3.5 ASP.NET中的Session

说完了Cookie,我们再来说说Session。它和Cookie类似,都可以用变量值表示浏览者的身份,不同的是:Cookie存于客户端,而Session变量存于服务器。未经授权,你可以修改甚至伪造一个Cookie,但你不能修改Session,在安全性方面,Session明显更胜一筹,但如果浏览者较多,Session保存时间较长,势必会给服务器造成较大的负担。所以,现在流行的办法是涉及到“管理”时采用“Cookie+Session双验证”,而普通会员只采取“Cookie单验证”,这样会使安全性和服务器负载达到较好的平衡。

在使用Session对象之前,我们有必要对ASP.NET中的Session有一个概念性的了解:

由于Session被保存在服务器上,不需要对客户端执行什么操作。所以Session的使用方法较Cookie要容易的多,常用的Session操作如下表所示:

对象名:

Session

赋予Session:

Session["键名"]=键值;

取得Session:

Session["键名"]

销毁Session:

Session.Abandon();

10.3.6 在ASP.NET中练习使用Session

我们还是在示例中学习ASP.NET中Session的用法。在Visual Studio 2005“解决方案资源管理器”下的地球图标上点右键→“添加一个新项目”,命名为Session.aspx,稍等片刻即可在“解决方案资源管理器”看到页面文件和逻辑文件。

在Session.aspx的设计界面,从工具箱里拖入工作区一个Panel组件、两个TextBox组件、一个Button组件和一个LinkButton组件。命名方式和上一例子相同:分别为myPanel、myUID、myPWD、myBTN和myLB。由于Session默认生存期为20分钟,所以我们并不需要上例的DropDownList下拉菜单。摆放顺序与上例类似,如图10.44所示:

图10.44

双击myLB文本按钮,Visual Studio 2005软件将自动转到其逻辑文件中,并且为此按钮增加了一个逻辑代码块。代码如图10.45所示:

图10.45

双击时,页面代码Session.aspx关于myLB标签也自动增加了一个触发代码:

<asp:LinkButton ID="myLB" runat="server" OnClick="myLB_Click">退出管理</asp:LinkButton>

10.3.7 逻辑代码的编写

在“解决方案资源管理器”中点选Session.aspx下面处于折叠状态的Session.aspx.cs,在其中输入如下代码:

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

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

{

    //下面代码声明了用于接收用户名,密码,随机数的变量

    private string uid;

    private string pwd;

    Random r = new Random();

    protected void Page_Load(object sender, EventArgs e)

    {

        //页面初始化时,“退出登录”这个连接是不可见的

        myLB.Visible=false;

       //如果本页不是被POST提交而访问的

        if(!IsPostBack){

        //如果Sesson对象集中auth子集的值为admin

            if(Session["auth"]=="admin"){

                 //返回登录信息

                Response.Write("你已登录管理状态");

                //登陆群组不可见

                myPanel.Visible=false;

                //一旦登录,“退出登录”这个按钮就可见

                myLB.Visible=true;

                //如果密码错误,则重新进行登录循环

            }else{

                myPanel.Visible=true;

            }

        }else{

            //用uid和pwd这两个变量接收文本输入框的值

            uid = Request.Form["myUID"];

            pwd = Request.Form["myPWD"];

            //如果满足用户名和密码值

            if (uid == "lau" && pwd == "abcdefg")

            {

                //赋予Session

                Session["auth"] = "admin";

                //返回随机页面

                Response.Redirect("Session.aspx?rand=" + r.Next(10000));

            }

        }

    }

//这是刚才双击myLB组件生成的代码块

    protected void myLB_Click(object sender, EventArgs e)

    {

        //销毁Session

        Session["auth"] = null;

Session.Abandon();

        //跳转到随机页面

        Response.Redirect("Session.aspx?rand="+r.Next(100));

    }

}

10.3.8 编写Session页面文件

逻辑代码文件编写完成之后,我们来编写页面文件Session.aspx,在“解决方案资源管理器”中双击Session.aspx,在其中输入代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Session.aspx.cs" Inherits="_Session" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

<head runat="server">

<title>Session测试</title>

</head>

<body>

<form id="form1" runat="server">

<div>&nbsp;

<asp:Panel ID="myPanel" runat="server" Height="89px"

 Width="260px">

用户名:<asp:TextBox ID="myUID" runat="server">

</asp:TextBox>&nbsp;<br />

密 &nbsp; 码:<asp:TextBox ID="myPWD" runat="server"

 TextMode="Password"></asp:TextBox>&nbsp;<br />

<br/>

<asp:Button ID="myBTN" runat="server" Text="submit"/>

</asp:Panel>

<asp:LinkButton ID="myLB" runat="server" OnClick="myLB_Click">退出管理</asp:LinkButton></div>

</form>

</body>

</html>

调试效果如图10.46所示:

 

图10.46

输入正确的密码之后,效果如图10.47所示:

图10.47

* 注:这个示例的源文件在附带光盘 第十章\4\session.aspx和session.aspx.cs

关闭浏览器或20分钟后不执行操作,Session将过期。

通过本节学习,我们对ASP.NET中的Cookie和Session使用有了一个概括性了解。建议读者自己多多尝试。

 

好的flash demo http://www.flash-china.com/ 立即下载

相关推荐

一个前几年做的flash游戏demo

NULL 博文链接:https://fis.iteye.com/blog/1027866

flash与ASP通信的几种方法

一个例子简单的描述了如何通过GET方法向服务器端的ASP发送请求:_root. pushAction = function(URL) {    this.loadVariables(URL, "GET"); }var ask = true;var pushURL = "http://localhost/test/return.asp?ask="+ ask; pushAction (pushURL)

chen_hw1987的专栏 554

前端网页播放flash文件(DEMO)

资源内容:网页flash文件播放器(DEMO) 适合人群:前端开发

STM32F4--FLASH读写demo

最近在写机器人的姿态解算,需要把一些数据保存到stm32f4的内部Flash中。于是调了一下午Flash,整理出了下面这个demo程序。发现stm32f4的功能还挺强的,8位、16位、32位、64位的数据都能读写。而且还能写入负数,虽然库里提供的函数写数据的类型是无符号的,我也不知道这是什么原因。 flash.c #include "flash.h" /*******************

徐的博客 7105

告别反复格式化!用Ventoy制作2025年终极启动盘,Windows/Linux/macOS一网打尽

本文详细介绍了如何使用Ventoy制作2025年终极多系统启动盘,彻底告别反复格式化U盘的烦恼。Ventoy通过创新的引导加载器架构,允许用户在一个U盘内同时存放并直接启动Windows、Linux、macOS等多种系统镜像和WePE等维护工具,实现真正的非破坏性管理和极高的U盘利用率。文章涵盖从安装配置、镜像库构建到安全启动设置等全流程实战指南。

weixin_29280219的博客 241

Python开发者必看:5分钟搞定Gemini API的3种调用方式(含代码示例)

本文为Python开发者详细介绍了三种高效调用Gemini API的核心方式:基础同步调用、流式调用和聊天模式,并涵盖多模态应用等高级特性。通过清晰的代码示例和实战场景分析,帮助开发者快速掌握Gemini API的集成与优化,提升AI应用开发效率。

g8f9d0s1a2的博客 1122

RT1064学习笔记(5)--Flash例程(Flash Demo)

RT1064之Flash例程 Ps:本例程主要作用是,展示如何使用FLASH储存数据的概念 主板为:逐飞RT1064 + 母板 一,NAND flash 控制原理(基于RT1052) NAND flash 作用类似于电脑的固态硬盘,主要用于存储数据。相同容量 NAND flash要比 Nor flash 便宜很多, NAND flash 只能按页读、写,所以在 NAND flash 中不能执行代码...

精神小火君 3508

半导体设备微振动控制:天棚阻尼PID与SIMULINK建模实战

半导体制造设备对微振动的敏感度已进入纳米级,光刻机、量测设备等一旦遭遇超过VC-C振动准则的扰动,便会出现套刻误差或检测误判。主动隔振技术通过传感器、控制器与执行器形成闭环,能有效抑制低频共振,其中天棚阻尼控制因物理概念清晰、鲁棒性强而成为工程首选。结合MATLAB/SIMULINK建模,可在设计阶段完成系统性能边界评估与参数整定,再通过C代码生成与FMU导出实现算法向控制器和跨平台仿真迁移。本文从VC-C指标拆解出发,依次讲解天棚阻尼PID控制原理、两自由度被控对象建模、控制增益估算、仿真验证方法,并给出

weixin_29169505的博客 326

招 C++、Flash棋牌游戏主程、Asp.net高级软件开程师

招 C++、Flash棋牌游戏主程、Asp.net高级软件开程师---------------------------------------------------------------------------------------职位描述:C++ 棋牌游戏主程岗位职责: 1. 能根据要求定制开发游戏框架功能和模块. 2. 能够独立开发网络棋牌游戏服务端,能独立维护产品. 3. 对已有框

∠卖樱花的小熊 8921

GEO数据挖掘实战:用R语言从GSE42872数据集中找到关键差异基因(附完整代码)

本文详细介绍了使用R语言从GSE42872数据集中挖掘关键差异基因的完整流程,包括数据下载、探针ID转换、差异表达分析和功能富集分析。通过实战代码演示,帮助生信研究者掌握GEO数据挖掘的核心技术,快速识别疾病相关基因并理解其生物学功能。

weixin_42625070的博客 365

ASM磁盘通过rebalance迁移

一、实施要点: 1、数据迁移前,如果库不大,最好全库备份一次 2、进行数据平衡时,数据磁盘是添加到现有磁盘组,而不是重新建一个磁盘组 3、本次实施过程,服务器只有1张HBA卡,本次实施先取消原有的多路径,只保留旧有存储单路径,另一个FC口插上新存储的路径。待迁移完成后,再配置新存储的多路径 二、实施步骤 1.查询并配置ASM磁盘 [root@rac1 ~]# /sbin/scsi_id...

qq_40673916的博客 1371

SWFUpload免费FLASH上传组件(ASP…

SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统<input type="file" />标签的文件上传模式。 今天想找一款WEB客户端上传方式,传统的ASP上传组件需要在服务器端组册,而且缺少友好的进度条,所以试着选择用SWFUpload。看了官方的例子还不错,但只有

php菜鸟技术天地 980

飞书日历同步Outlook翻车?我踩过的坑和最终用Google Calendar成功的完整配置记录

本文详细记录了从Outlook日历同步到飞书时遇到的常见问题及解决方案,特别是通过Google Calendar实现稳定同步的完整配置流程。文章揭示了Outlook同步方案易翻车的原因,并提供了Google Calendar的避坑指南、高级技巧和企业级部署建议,帮助用户高效实现日历同步。

weixin_33724046的博客 313

使用Flash循环播放图片的Demo

点击下载关键文件放程序根目录 静态实现 Code <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="ImageDemo._Default"%> <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Tr...

anzheng9205的博客 289

作物生长模型Oryza V3实战2:下载、安装与使用

摘要:ORYZA 现在的应用范围已从单一水稻作物模拟扩展到多个水稻作物模拟。我在csdn站内也上传了“作物生长模型oryza v3大全(含所有参数模板和4个校准程序1个分析工具)”,可以说是全网最全的吧。网上搜索一般下载的v3只有一个a3主程序,不适合作全面与深入的研究,本版本从国外下载回来,一开始少了一个“SoilHydrau.exe”文件,说是有病毒被隔离了,后经历各种技术手段,并向国际水道研究所发送邮件,才得以补全所有的参数化及校准程序、分析工具,来之不易,有缘人得之。

502

YOLOv10改进,YOLOv10二次创新C2f结构采用WTConv卷积(感受野的小波卷积),ECCV 2024

WTConv 的核心思想是通过结合卷积神经网络(CNN)的强大特征提取能力与小波变换的多尺度特性,来实现大感受野的卷积操作,同时避免传统大卷积核带来的参数爆炸问题。传统的卷积操作通过滑动小窗口在图像上逐步执行局部特征提取,感受野的大小直接取决于卷积核的尺寸。随着卷积核的增大,参数量呈指数增长,导致网络训练效率降低、计算资源消耗增加。为解决这些问题,WTConv 提出了在小波域中执行卷积操作的策略。小波变换是一种常用于信号处理的技术,能够将信号分解为不同频率成分。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1023

Asp.net MVC使用KindEditor4

最近转入Asp.net MVC开发,WebForm下惯用的FreeTextBox已然不能用了。于是想找个功能全、界面雅、免费的纯JS编辑器,KindEditor4正好满足本人的要求,包括图片、Flash、视频上传及空间管理而且配置也异常的简单。下面简单说一下在Asp.net MVC环境下基本配置方法。 Step 1. 下载KindEditor 首先到KindEditor官网下载(目前是4.

萌萌的It人 www.itmmd.com 6503

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

用vs.net创建webservice+flash简易计算器

=====================  转载请保留以下信息  原创:欧阳东杰  http://www.cnsxml.com =====================看过这个教程后,您会发现,webservice在.net上真的很简单!  我们要利用vs.net创建一个简单的webservice,他的功能是进行简单四则运算.  然后创建一个flash来调用这个webservice一

欧阳东杰的技术博客 1464

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

两个flash图表控件对比:AnyChart和FusionCharts

前言: Flash图表以其动态、交互的可视化体验得到广大用户的青睐。本文对两款常用的Flash图表控件FusionCharts和AnyChart进行了对比 FusionCharts FusionCharts是跨平台、跨浏览器的Flash图表组件。 FusionCharts兼容所有的Web技术,如ASP,ASP.NET,PHP,JSP,ColdFusion,JavaScript甚至简单的HTM

IBigPig 1247

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SWFUpload免费FLASH上传组件(ASP修改版)

<br />者:Q人甲<br />SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术 为WEB开发者提供了一个具有丰富功能继而超越传统<inputtype="file" />标签的文件上传模式。<br />今天想找一 款WEB客户端上传方式,传统的ASP 上传组件需要在服务器端组册,而且缺少友好的进度条,所以试着选择用SWFUpload。看了官方的例子还不错,但只有 PHP/ASP .NET 的实例,可惜不会,于是上网

闷骚的男 4865

在ASP.NET MVC Framework中,上传文件真是超级简单,

kongfl888的空间 因为我们还会进步,所以偶尔也会跑调。 2011-04-27 16:32 在ASP.NET MVC Framework中,上传文件真是超级简单, 在ASP.NET MVC Framework中,上传文件真是超级简单,看代码: View <formaction="<%=Url.Action("Process"...

weixin_33800593的博客 110

ASP.NET使用SWFUpload上传大文件教学(源码)

前段时间从网上转摘了一篇并于在ASP.NET中利用SWFUpload上传的文章,可能原文介绍也不是很详细,很多朋友发信说看不明白或者不会使用,正好在目前作的一个电子政务项目中用到了该方法,把源码贴出如下 好像还是有很多朋友弄不明白呢,FLA需要用adobe FLASH打开的,不明白的请写明详细原因,我这里用的就是这个源码,一切正常 好多加QQ的朋友啊,其实我写的已经很明白了,但是依然有好多...

weixin_34226182的博客 176

FLASH+ASP.NET(C#)的断点续传(上传)解决方案

DEMO的下载地址: http://files.cnblogs.com/liulun/flashUploader.rar 参考文章所在地址: http://blog.l4cd.net/post-old-102.html http://www.kingnare.com/auzn/archives/548   本来想做SL版的断点续传,但是客户觉得SL客户端占有率太低 就选择采用FLAS...

weixin_34163553的博客 76

基于jQuery和Flash的多文件上传插件uploadify在asp.net下session丢失解决方案

转自:http://www.cnblogs.com/fumj/archive/2012/11/30/2795990.html

懒人改变世界 1011
上一篇: 利用Flash读取SQL Server数据库的值
下一篇: javascript框架比较(一)
GoodShot
博客等级 码龄22年 968粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值