`

ashx处理程序

    博客分类:
  • HTML
 
阅读更多

ashx

与Java Servlet类似,不用涉及到aspx个页面。ashx是asp的基本处理程序。aspx继承自ashx处理程序的。

 

.ashx文件适合产生供浏览器处理的、不需要回发处理的数据格式,例如用于生成动态图片、动态文本等内容。

 

创建ashx程序

Visual Studio中【添加新项】对话框-->【web】菜单-->【一般处理程序】。

 

注意:表单提交一定要有name

提交到服务器的表单元素,一定要有name属性。否则浏览器不会提交表单元素的值。

由于servlet和struts2获取请求参数时都会使用浏览器端的name属性。所以之前没有注意过这个问题。

 

说明:

新建的一般处理程序。会有WebService的字符在类之前。但没有引入命名空间。显示错误。

在不使用WebService情况下,可以删掉。也可以引入命名空间,消除错误。

 

例:

1.HTML表单

 

<html> 
<head><title></title></head>
<body>
<form action="Hello.ashx">
姓名:<input type="text" name="UserName" /><input type="submit" value="提交" />
</form>
</body>
</html>

 

 

2.ashx处理程序

 

//Hello.ashx文件

using System;
using System.Web;

public class Hello:IHttpHandler{
    
    public void ProcessRequest(){
        context.Response.ContentType="text/html";
        string userName=context.Request[UserName];
        if(string.IsNullEmpty(userName)){
            context.Response.Write("Welcome:"+userName);
        }else{
            context.Response.Write("Welcome");
        }
    }

    public bool IsReusable{
        get{
            return false;
        }
    }
}

 

 

HttpHandler实现文件下载

如果HttpHandler输出的是html,txt,jpeg等类型的信息,那么浏览器会直线显示。如果希望弹出保存对话框,则需要添加Header:

string encodeFileName=HttpUtility.UrlEncode("下载数据.xls");

Response.AddHeader("Content-Disponsition",string.Format("attachment;filename=\"{0}\"",encodeFileName));

 

说明:filename表示默认文件名。

 

ContentType:

excel:application/x-excel

任意文件下载:application/x-stream

 

 

NPOI创建Excel

 

1.把NPOI拷贝到项目中。

    即在应用程序中建立一个文件夹(如lib),拷贝NPOI的所有dll和其他文件到这个文件夹中。

 

2.引用文件夹中的dll

    右击【引用】-->【添加引用】-->【浏览】

 

3.新建一般处理程序。

 

using System;
using System.Web;

public class Hello:IHttpHandler{
    
    public void ProcessRequest(){
        context.Response.ContentType="application/x-excel";
        string encodeFileName=HttpUtility.UrlEncode("动态数据.xls");
        Response.AddHeader("Content-Disponsition",string.Format

("attachment;filename=\"{0}\"",encodeFileName));
        HSSFWorkbook=new HSSFWorkbook();
        HSSFSheet sheet = workbook.CreateShet();
        HSFRow = sheet.CreateRow(0);
        HSSF Cell1=row.CreateCell(0,HSSFCell.CELL_TYPE_STRING);
        cell1.SetCellValue("hello");
        //row.CreateCell(0,HSSFCell. CELL_TYPE_STRING ).SetCellValue("Hello");
        row.CreateCell(1,HSSFCell.CELL_TYPE_NUMERIC).SetCellValue(3.14);
        wookbook.Write(context.Response.OutpouStream);
    }

    public bool IsReusable{
        get{
            return false;
        }
    }
}
 

 

 

 

注意:能直接将生产的文件以流的形式输出给浏览器,就不要生产临时文件。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics