加载中…
个人资料
小瓶子
小瓶子
  • 博客等级:
  • 博客积分:0
  • 博客访问:98,906
  • 关注人气:13
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

ashx 文件 & 使用

(2011-12-29 11:11:32)
标签:

it

分类: ASP.NET

.ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。当然你完全可以用.aspx 的文件后缀。使用.ashx 可以让你专注于编程而不用管相关的WEB技术。.ashx必须包含IsReusable. 如下例所示


<% @ webhandler language="C#" class="AverageHandler" %>

using System;
using System.Web;

public class AverageHandler : IHttpHandler
{
public bool IsReusable
{ get { return true; } }
public void ProcessRequest(HttpContext ctx)
{
ctx.Response.Write("hello");
}
}
.ashx比.aspx的好处在与不用多一个html  
注意了VS2005中Web应用程序项目模板里的Generic Handler 项,发现它是一个.ashx文件,实际上它是一个HttpHandler(如果它继承了IHttpHandler的话)。

HttpHandler是一个彻底自定义Http请求的方法,它通过web.config来定义Asp.Net运行时来过滤出要自定义的Http请求,发送到定义在web.config的指定类中。

利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。这个文件特别适合于生成动态图片,生成动态文本等内容。

大家可以看出Response类有个OutputStream方法,可以向客户端输出二进制数据流,所以在我的项目中,使用这个方法,在一个.ashx中使用DundasChart控件就可以生成非常好的统计图,用它发送二进制数据,方便快捷,而且不需在web.config内输入任何配置代码。

.ashx文件有个缺点,他处理控件的回发事件非常麻烦,比如说如果用它来生成DataGrid的列表也不是不行,但是处理数据的回发,需要一些.aspx页的功能,只有自己手动处理这些功能。所以,一般使用.ashx,用来输出一些不需要回发处理的项目即可。 

问:

1.Handler.ashx 取不到Session的值

  解决办法 1.添加命名空间 using System.web.SessionState;
           2.添加继承IRequiresSessionState 可以使用context.Session获取值
2.Jquery 读取.ashx文件
 function clickfun() {
            try {
                var auctionIndx = $("#HiddenField1").val();
                        //插入数据返回读取结果
                        $.get("InsertTauctionInfo.ashx?dateid=" + new Date(), { "auctionId": auctionIndx, "phone": $("#txtPhone").val(), "bidPrice": $("#txtBidPrice").val() }, function(data) {
                              alert(data);
                        });
            } catch (e) {
                location.reload();
           
        }
 
 C# Code   InsertTauctionInfo.ashx
<%@ WebHandler Language="C#" class="InsertTauctionInfo" %>
using System;
using System.Web;
using System.Data;
public class InsertTauctionInfo : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
       //获取请求的数据
        string auctionId = HttpContext.Current.Request.QueryString["AuctionId"];
        string bidPrice = HttpContext.Current.Request.QueryString["BidPrice"];
        string phone = HttpContext.Current.Request.QueryString["phone"];
        context.Response.Write(BidPriceMethod(auctionId, phone, bidPrice));
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
    public string BidPriceMethod(string auctionId, string phone, string bidPrice)
    {
        string returnvalue = "";
        try
        {
            if (auctionId != null)
            {
                string consigneeMobi = @"^(13|15|18)[0-9]{9}$";// @"^(1[0-9])\d{9}$";              
                string cellphone = "";
                if (System.Text.RegularExpressions.Regex.IsMatch(phone, consigneeMobi)) //手机号码
                {
                    cellphone = phone;
                         
                else
                {
                    returnvalue = "手机号码格式不正确 如:13888888888";
                    return returnvalue;
                }
                if (string.IsNullOrEmpty(bidPrice))
                {
                    returnvalue = "请输入自定义价格";
                    return returnvalue;
                }
                DataTable tableName = BLL.TAuctionBidBLL.SelectAuctionInfoMaxUser(auctionId);
                if (tableName != null && tableName.Rows.Count > 0)
                {
                    if (tableName.Rows[0][0].ToString() == usName)
                    {
                        returnvalue = "不能连续出价";
                        return returnvalue;
                    }
                }
                try
                {
                    Int64 maxBidPrice = BLL.TAuctionBidBLL.SelectTauctionBidWithMaxBidPrice(Convert.ToInt32(auctionId)); //查询出当前竞拍中最高出价
                    BidPrice = Convert.ToInt64(bidPrice);//传入过来的出价值
                    Int64 maxAddPrice = (Int64)BLL.TauctionInfoBLL.maxAddPrice(auctionId);//查询出最高加价
                    DataTable priceTable = BLL.TauctionInfoBLL.GetEndPrice(auctionId);
                    Int64 strPrice = Convert.ToInt64(priceTable.Rows[0][0]);
                    Int64 endPrice = Convert.ToInt64(priceTable.Rows[0][1]);
                    if (BidPrice < strPrice)
                    {
                        returnvalue = "您出价不能小于起始价,请重新出价";
                        return returnvalue;
                    }
                    if (maxBidPrice == 0)
                    {
                        Int64 isMaxStrPrice = BidPrice - strPrice;
                        if (isMaxStrPrice > maxAddPrice)
                        {
                            returnvalue = "您出价过高,每次加价最多能加价" + maxAddPrice + "元";
                            return returnvalue;
                        }
                    }
.......
 
代码详见:

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有