61阅读

asp.net教程-ASP.net组件编程中的两种事件编写方法

发布时间:2018-03-24 所属栏目:asp.net从入门到精通

一 : ASP.net组件编程中的两种事件编写方法

以下是组件代码:


usingSystem;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.ComponentModel;

namespaceNSEventStudy
{
publicdelegatevoidTwoEventHandle(intflag);

publicclassEventStudy:System.Web.UI.WebControls.WebControl
{

///////////////第一种定义事件的方法////////////////////

publiceventTwoEventHandleTwoEvent;

publicvoidExecute(intflag)
{
TwoEvent(flag);
}

////////////////第二种定义事件的方法////////////////////

privatestaticobject_Process=newobject();
publiceventTwoEventHandleThreeEvent
{
add
{
Events.AddHandler(_Process,value);
}
remove
{
Events.RemoveHandler(_Process,value);
}
}

publicvoidInnerExecute(intflag)
{
TwoEventHandlehandle=(TwoEventHandle)Events[_Process];
if(handle!=null)
{
handle(flag);
}
else
{
this.RaiseBubbleEvent(this,null);
}
}

protectedoverridevoidRender(HtmlTextWriterwriter)
{
base.Render(writer);
writer.WriteLine("我爱你,中国");
}

}
}

测试程序:



usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Web;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;

namespaceTestEvent
{
///<summary>
///WebForm1的摘要说明。
///</summary>
publicclassWebForm1:System.Web.UI.Page
{
protectedSystem.Web.UI.WebControls.ButtonButton1;
protectedNSEventStudy.EventStudyEventStudy1;

privatevoidPage_Load(objectsender,System.EventArgse)
{
//在此处放置用户代码以初始化页面
}

#regionWeb窗体设计器生成的代码
overrideprotectedvoidOnInit(EventArgse)
{
//
//CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

///<summary>
///设计器支持所需的方法-不要使用代码编辑器修改
///此方法的内容。
///</summary>
privatevoidInitializeComponent()
{
this.EventStudy1.ThreeEvent+=newNSEventStudy.TwoEventHandle(this.EventStudy1_ThreeEvent);
this.EventStudy1.TwoEvent+=newNSEventStudy.TwoEventHandle(this.EventStudy1_TwoEvent);
this.Button1.Click+=newSystem.EventHandler(this.Button1_Click);
this.Load+=newSystem.EventHandler(this.Page_Load);

}
#endregion

privatevoidEventStudy1_TwoEvent(intflag)
{
this.Response.Write("<script>javascript:alert('TwoEvent事件触发')</script>");
}

privatevoidEventStudy1_ThreeEvent(intflag)
{
this.Response.Write("<script>javascript:alert('ThreeEvent事件触发')</script>");
}

privatevoidButton1_Click(objectsender,System.EventArgse)
{
this.EventStudy1.Execute(6);
this.EventStudy1.InnerExecute(10);
}
}
}

二 : 使用ASP.NET操作IIS7中使用应用程序

在最新发布的启明星Portal里,增加了安装程序,下面说一下.NET对IIS7操作。IIS7的操作和IIS5/6有很大的不同,在IIS7里增加了 Microsoft.Web.Administration 命名空间里,增加了ServerManager、Site几个大类来操作IIS7。

下面是一些核心代码,可以直接使用

1)建立虚拟目录

建立虚拟目录时,默认使用“Default Web Site”,也就是默认建立在Default Web Site, CreateVdir需要两个参数:虚拟路径名称和实际的物理路径

 public static bool  CreateVdir(string vdir,string phydir)
        {
           
                ServerManager serverManager
= new ServerManager();
                Site mySite
= serverManager.Sites["Default Web Site"];
                mySite.Applications.Add(
"/" + vdir, phydir);
                serverManager.CommitChanges();
               
return true;
           
        }

这里建立的是在Default Web Site下的虚拟目录,将上面的mysite修改为

Site mySite = iisManager.Sites.Add("test", "http", "*:80:" + WebName + ".intranet." + TLD, @"c:Webs" + WebName);

则可以建立网站。这2个区别是:你建立一个网站。前面的访问示意URL是 http://www.dotnetcms.org/book ,而后者是http://book.dotnetcms.org 

接下来创建应用程序池

public static void CreateAppPool(string appPoolName)
        {
           
try
            {
                ServerManager serverManager
= new ServerManager();
                serverManager.ApplicationPools.Add(appPoolName);
                ApplicationPool apppool
= serverManager.ApplicationPools[appPoolName];
                apppool.ManagedPipelineMode
= ManagedPipelineMode.Classic;
                serverManager.CommitChanges();
                apppool.Recycle();
            }
           
catch
            { }
        }

这里ManagedPipelineMode的取值 ManagedPipelineMode.Classic;IIS7支持经典Classic方式和Interget集成方式,在集成方式下

自定义的handler和Module可能无效,如果你想和以前IIS5/6版本兼容可以使用Classic方式,否则建议使用集成方式。

下面代码演示了如何把虚拟目录分配到应用程序池,和IIS5/6最大的区别是vdir其实是vdir path,所以这里加了一个“/”,表示一个虚路径。

 public  static void AssignVDirToAppPool(string vdir,string appPoolName)
        {

           
try
            {
                ServerManager serverManager
= new ServerManager();
                Site site
= serverManager.Sites["Default Web Site"];
                site.Applications[
"/" + vdir].ApplicationPoolName= appPoolName;
                serverManager.CommitChanges();
            }
           
catch
            {
           
            }
          
        }

最后增加一个删除操作

public static bool DeleteVdir(string vDirName)
        {
           
try
{
                ServerManager serverManager
= new ServerManager();
                Site mySite
= serverManager.Sites["Default Web Site"];
                Microsoft.Web.Administration.Application application
= mySite.Applications["/" + vDirName];
                mySite.Applications.Remove(application);
                serverManager.CommitChanges();
               
return true;
            }
           
catch
            {
               
return false;
            }
        }

到此,.NET操作IIS7的基本功能已经实现了。

三 : ASP.NET保存远程图片到本地的函数

使用ASP.NET抓取远程图片保存到本地,是个不错的主意,这样图片的访问速度就快,以下是本站原创的保存远程图片到本地的函数,支持.bmp,.jpg,.jpeg,.gif,.png等格式的远程图片。

源代码如下:

导入命名空间

using System.Net;
using System.IO;
using System.Drawing.Imaging;

   /// <summary>
    /// 下载远程图片保存到本地
    /// </summary>
    /// <param name="savedir">本地保存路径</param>
    /// <param name="imgpath">远程图片文件</param>
    /// <returns></returns>
    public string downRemoteImg(string savedir,string imgpath)
    {
        if (string.IsNullOrEmpty(imgpath))
            return string.Empty;
        else
        {
            string imgName = string.Empty;
            string imgExt = string.Empty;
            string saveFilePath = string.Empty;
            imgName = imgpath.Substring(imgpath.LastIndexOf("/"), imgpath.Length - imgpath.LastIndexOf("/"));
            imgExt = imgpath.Substring(imgpath.LastIndexOf("."), imgpath.Length - imgpath.LastIndexOf("."));
           
            saveFilePath = Server.MapPath(savedir);
            if (!Directory.Exists(saveFilePath))
                Directory.CreateDirectory(saveFilePath);

            try
            {
                WebRequest wreq = WebRequest.Create(imgpath);
                wreq.Timeout = 10000;
                HttpWebResponse wresp = (HttpWebResponse)wreq.GetResponse();
                Stream s = wresp.GetResponseStream();
                System.Drawing.Image img;
                img = System.Drawing.Image.FromStream(s);
                switch (imgExt.ToLower())
                {
                    case ".gif":
                        img.Save(saveFilePath + imgName, ImageFormat.Gif);
                        break;
                    case ".jpg":
                    case ".jpeg":
                        img.Save(saveFilePath + imgName, ImageFormat.Jpeg);
                        break;
                    case ".png":
                        img.Save(saveFilePath + imgName, ImageFormat.Png);
                        break;
                    case ".icon":
                        img.Save(saveFilePath + imgName, ImageFormat.Icon);
                        break;
                    case ".bmp":
                        img.Save(saveFilePath + imgName, ImageFormat.Bmp);
                        break;
                }

                img.Dispose();
                s.Dispose();

                return savedir + imgName;
            }
            catch
            {
                return imgpath;
            }
        }
    }

使用方法:

如保存到本地的test目录:

Response.Write(this.downRemoteImg("test", "http://www.xueit.com/ads/top760.gif"));

作者:dodo 原文:

本文标题:asp.net教程-ASP.net组件编程中的两种事件编写方法
本文地址: http://www.61k.com/1161970.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1