• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    aspx与ascx,ashx的用法总结

    做asp.net开发的对.aspx,.ascx和.ashx都不会陌生。关于它们,网上有很多文章介绍。“纸上得来终觉浅,绝知此事要躬行”,下面自己总结一下做个笔记。

    1、.aspx
    Web窗体设计页面。Web窗体页由两部分组成:视觉元素(html、服务器控件和静态文本)和该页的编程逻辑(VS中的设计视图和代码视图可分别看到它们对应得文件)。VS将这两个组成部分分别存储在一个单独的文件中。视觉元素在.aspx 文件中创建。

    2、.ascx
    asp.net的用户控件,是作为一种封装了特定功能和行为(这两者要被用在Web应用程序的各种页面上)的Web页面被开发的。一个用户控件包含了html、代码和其他Web或者用户控件的组合,并在Web服务器上以自己的文件格式保存,其扩展名是*.ascx。asp.net里的缺省配置并不允许Web客户端通过url来访问这些文件,但是这个网站的其他页面可以集成这些文件里所包含的功能。

    3、.ashx
    前面两个都太熟悉了,这个才是要讲的重点。

    (1)使用举例
    .ashx文件是主要用来写web handler的。使用.ashx 可以让你专注于编程而不用管相关的web技术。我们熟知的.aspx是要做html控件树解析的,.aspx包含的所有html实际上是一个类,所有的html都是类里面的成员,这个过程在.ashx是不需要的。ashx必须包含IsReusable属性(这个属性代表是否可复用,通常为true),而如果要在ashx文件用使用Session必须实现IRequiresSessionState接口.
    一个简单的实现修改登录用户密码的示例:

    复制代码 代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    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;
    using System.Web.SessionState;

    namespace Test
    {

        public class HandlerTest : IHttpHandler, IRequiresSessionState
        {

            public void ProcessRequest(HttpContext context)
            {
                context.Response.ClearContent();
                context.Response.ContentType = "text/plain";
                context.Response.Cache.SetCacheability(HttpCacheability.NoCache); //无缓存

                string action = context.Request.Params["action"]; //外部请求
                if (action == "modifyPwd") //用户改密码
                {
                    string oldPwd = context.Request.Params["pwd"];

                    //在ashx文件用使用Session必须实现IRequiresSessionState接口
                    //Session["LogedUser"]是登录用户的会话,用户名和密码都是test
                    if (oldPwd.ToUpper() != ((context.Session["LogedUser"]) as Customer).Password.ToUpper()) //用户输入的旧密码和当前登录用户的不相同
                    {
                        context.Response.Write("旧密码输入错误!");
                    }
                    else
                    {
                        context.Response.Write("旧密码输入正确!");
                    }
                }


                context.Response.End();
            }

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


    客户端的调用(js和页面部分):
    复制代码 代码如下:

    %@ Page Language="C#" AutoEventWireup="true" CodeBehind="ASHXTest.aspx.cs" Inherits="ASHXTest" %>

    !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>mytest/title>
        script type="text/javascript">
            function $(s) { if (document.getElementById) { return eval('document.getElementById("' + s + '")'); } else { return eval('document.all.' + s); } }

            function createXMLHTTP() {
                var xmlHttp = false;
                var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
                             "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
                             "Microsoft.XMLHTTP"];
                for (var i = 0; i arrSignatures.length; i++) {
                    try {
                        xmlHttp = new ActiveXObject(arrSignatures[i]);
                        return xmlHttp;
                    }
                    catch (oError) {
                        xmlHttp = false; //ignore
                    }
                }
                // throw new Error("MSXML is not installed on your system.");
                if (!xmlHttp typeof XMLHttpRequest != 'undefined') {
                    xmlHttp = new XMLHttpRequest();
                }
                return xmlHttp;
            }

            var xmlReq = createXMLHTTP();

            // 发送ajax处理请求(这里简单验证旧密码的有效性)
            function validateOldPwd(oTxt) {
                var url = "/HandlerTest.ashx?action=modifyPwdpwd=" + escape(oTxt.value); //.ashx文件
                xmlReq.open("get", url, true);
                xmlReq.setRequestHeader("If-Modified-Since", "0");
                xmlReq.onreadystatechange = callBack;
                xmlReq.send(url); // 发送文本
            }

            function callBack() {
                if (xmlReq.readyState == 4) {
                    if (xmlReq.status == 200) {
                        alert(xmlReq.responseText); // 接收文本
                    }
                    else if (xmlReq.status == 404) {
                        alert("Requested URL is not found.");
                    } else if (xmlReq.status == 403) {
                        alert("Access denied.");
                    } else
                        alert("status is " + xmlReq.status);
                }
            }

        /script>

    /head>
    body>
        form id="form1" runat="server">
        div>
            input id="txtOldPwd" type="text" onblur="validateOldPwd(this)" />
        /div>
        /form>
    /body>
    /html>


    分析:
    a、以前我们通常都是通过一个简单的aspx文件实现的功能,其实通过ashx也可以。
    笔者曾经写过的一篇ajax:数据传输方式简介 ,通过对比,我们发现aspx要将前后台显示和处理逻辑分开,所以就弄成了两个文件,其实,在最终编译的时候,aspx和cs还是会编译到同一个类中去.这中间就要设计html的一些逻辑处理;而ashx不同,它只是简单的对web http请求的直接返回你想要返回的结果.比aspx少处理了html的过程(但是ashx也可以处理html的一些逻辑,只是通常都不这么用)。理论上ashx比aspx要快。

    b、还是在相同的旧文里,我们知道数据传输的几种方式,其实ashx都可以实现(修改ashx文件里context.Response.ContentType 即可),这里不再赘述了。

    (2)ashx特别适合于生成动态图片,生成动态文本(纯文本,json,xml,javascript等即可)等。

    (3).ashx文件有个缺点:它处理控件的回发事件非常麻烦。处理数据的回发,通常都需要一些.aspx页的功能,只有自己手动处理这些功能(还不如直接建一个aspx文件来处理)。所以,一般使用.ashx输出一些不需要回发处理的项目即可。

    4、总结
    aspx-->P(Page)
    ascx-->C(Control)
    ashx-->H(HttpHandler)

    当浏览器访问web服务器,我们最终接收到的还是html文本。浏览器通过渲染引擎解释这些标签,在屏幕上展现出可见的效果。而asp.net不过就是我们应用的一种平台技术来"变相"解释html的,说白了它就是为了提高生产率,它的技术术语再多,本质上还是html范畴内的东西(如果你不通过那些动态页面技术完全利用html和浏览器(当然包括js)技术来实现动态页面效果,那么你会发现效果有了代码量也相当可观).所以说web开发的底层就是一堆的html标签,无论是asp.net还是jsp都是对html某种方式的包装,是html的产物。

    您可能感兴趣的文章:
    • ashx中使用session的方法(获取session值)
    • ASP.NET ASHX中获得Session的方法
    • Asp.net在ashx文件中处理Session问题解决方法
    • 在ashx文件中使用session的解决思路
    • ashx介绍以及ashx文件与aspx文件之间的区别
    • ashx文件的使用小结
    • 后缀为 ashx 与 axd 的文件区别浅析
    • 基于.NET中:自动将请求参数绑定到ASPX、ASHX和MVC的方法(菜鸟必看)
    • *.ashx文件不能访问Session值的解决方法
    上一篇:关于ASP.NET中TreeView用法的一个小例子
    下一篇:ashx文件的使用小结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    aspx与ascx,ashx的用法总结 aspx,与,ascx,ashx,的,用法,