当前位置: 代码迷 >> 综合 >> .NET中一般处理程序(ashx)在Ajax中的使用--下拉列表的动态级连
  详细解决方案

.NET中一般处理程序(ashx)在Ajax中的使用--下拉列表的动态级连

热度:41   发布时间:2024-01-14 15:07:50.0

.NET框架中有一个文件类型是一般处理文件(.ashx)。可以在ajax开发中作为服务器端使用。特别是当在请求停留在一个页面的时候,下面举个例子--实现html下拉列表的级连更新。

(1)ddlInnerJoin.aspx代码:

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

<!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>无标题页</title>
    <script type ="text/javascript" src="ddlInnerJoin.js"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <select id="major" onchange ="startRequest();">
            <option  value ="1">软件技术</option>
            <option value ="2" >网络技术</option>
        </select>
        <select id="class">
        </select>
    </div>
    </form>
</body>
</html>
(2)ddlInnerJoin.js代码:

/*创建者:浩海
 创建日期:2007-6-4
 版本:1.0
*/
var xmlHttp;
 var requesttype="";
    function createXmlHttp()
    {
    if(window.XMLHttpRequest)
    {
        xmlHttp=new XMLHttpRequest();//mozilla浏览器
    }
    else if(window.ActiveXObject)
    {
        try
        {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");//IE旧版本
        }
        catch(e)
        {
        }
        try
        {
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");//IE新版本
        }
        catch(e)
        {
        }
        if(!xmlHttp)
        {
            window.alert("不能创建XMLHTTPREQUEST对象!");
            return false;
        }
    }
}
function startRequest()
{
    createXmlHttp();
    //使用GET方式
    var url="ddlInnerJoin.ashx?major="+document.getElementById("major").options.value;
    xmlHttp.open("GET",url,true);
    xmlHttp.onreadystatechange=bindclass;
    xmlHttp.send(null);
   
}
function bindclass()
{
    if(xmlHttp.readyState==4)
    {
        if(xmlHttp.status==200)
        {
              var selclass=document.getElementById("class");
              //如果被动(被激发的)下拉有内容,要首先清空
              while(selclass.hasChildNodes())
              {
                 var node=selclass.children(0)
                 selclass.removeChild(node);
              } 
              //获取响应内容        
              var result=xmlHttp.responseText;
              //分割以方便绑定
              var optiontext=result.split(' ');
              //将分割后的内容绑定到被动下拉列表
              for(var i=0;i<optiontext.length;i++)
              {
                    var optionnode=document.createElement("OPTION");
                    optionnode.text=optiontext[i];
                    selclass.add(optionnode);
              }
        }
    }
}

(3)ddlInnerJoin.ashx代码:

<%@ WebHandler Language="C#" Class="ddlInnerJoin" %>
//创建者:浩海
//创建日期:2007-6-4
//版本:1.0
using System;
using System.Web;
//由于要访问数据库,引入命名空间
using System.Data.SqlClient;
using System.Data;
public class ddlInnerJoin : IHttpHandler {
   
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        string majorid = context.Request.Params["major"].ToString().Trim();
        string major = "";
        //避免不识别汉字
        if (majorid == "1")
        {
            major = "软件技术";
        }
        else if (majorid == "2")
        {
            major = "网络技术";
        }
        //从数据库提取数据
        SqlConnection conn = new SqlConnection("server=.;database=Tuition;uid=sa;pwd=sa;");
        SqlDataAdapter da = new SqlDataAdapter("select classname from dictblclass where classname like '" + major + "%'", conn);
        DataSet ds = new DataSet();
        da.Fill(ds);
        //定义响应文本的格式,以返回
        string result = "";
        foreach (DataRow row in ds.Tables[0].Rows)
        {
            result +=row[0].ToString().Trim() + " ";
        }
        context.Response.Write(result.Trim ());
        //context.Response.Write("Hello World");
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }
}

这样就可以轻松实现级连更新了,特别是数据量大的时候效果更明显。

  相关解决方案