通过web更新网站(1)

现在维护的网站比较多,经常因为要修改一个小小的东西,要远程登录,或者ftp登录上去下载下来,然后在修改后,再上传上去,总之比较麻烦,我现在总体设想是通过web实现手工的更新网站,既实现通过web下载、上传、删除、编辑。
今天是实现了对整个站点的文件显示,下载和上传到对应目录,为该程序的第一部分
aspx代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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">
        function select_dir() {
            var select = document.getElementById("selectType");
            document.getElementById("h_dir").value = select.options[select.selectedIndex].value; ;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <input id="h_dir" type="hidden" runat="server"/>
    <asp:Label ID="lbl_dir" runat="server" ></asp:Label>
    <asp:Button ID="btn_select" runat="server" Text="查看文件" 
        onclick="btn_select_Click" />
    <div style="width:400px; height:500px; overflow:auto">
        <asp:Label ID="show_file" runat="server" ></asp:Label>
    </div>
    <asp:FileUpload ID="file_up" runat="server" />
    <asp:Button ID="btn_up" runat="server"   Text="上传文件" onclick="btn_up_Click" />
    </form>
</body>
</html>

cs代码

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using System.Threading;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string web_file=Server.MapPath(".");
            DirectoryInfo thisOne = new DirectoryInfo(web_file);
           lbl_dir.Text="<select id='selectType' onclick='select_dir();' ><option value='" + System.Web.HttpContext.Current.Server.UrlEncode(web_file) + "'>网站目录</option>" + ListSelectShow(thisOne, 0, "") + "</select>";
           h_dir.Value = System.Web.HttpContext.Current.Server.UrlEncode(web_file);
           if (Request.QueryString["F"]!=null)
           {
                string d_file = System.Web.HttpContext.Current.Server.UrlDecode(Request.QueryString["F"].ToString());
               //求文件名
               string[] fs = d_file.Split('\\');
                string   ext = fs[fs.Length - 1];
               //下载文件
                Page.Response.Clear();
                bool success = ResponseFile(Page.Request, Page.Response, ext, d_file, 1024000);
                if (!success)
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('下载文件失败,请重试');", true);
                Page.Response.End();
           }
        }
    }
    public  string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录和 文件,树形结构显示
    {
        if (nLevel == 0)
        {
            FileInfo[] fileInfo = theDir.GetFiles();
            foreach (FileInfo fInfo in fileInfo)
            {                
                Rn += "├";
                Rn += "<a href='Default.aspx?F=";
                Rn = Rn + System.Web.HttpContext.Current.Server.UrlEncode(fInfo.FullName);
                Rn += "'>";
                Rn += fInfo.Name.ToString() + "</a> <br />";
               
            }
        }
        DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录
        foreach (DirectoryInfo dirinfo in subDirectories)
        {
            if (nLevel == 0)
            {
                Rn += "├";
            }
            else
            {
                string _s = "";
                for (int i = 1; i <= nLevel; i++)
                {
                    _s += "│&nbsp;";
                }
                Rn += _s + "├";
            }
            Rn += "<b>" + dirinfo.Name.ToString() + "</b><br />";
            FileInfo[] fileInfo = dirinfo.GetFiles();   //目录下的文件
            foreach (FileInfo fInfo in fileInfo)
            {
                if (nLevel == 0)
                {
                    Rn += "│&nbsp;├";
                }
                else
                {
                    string _f = "";
                    for (int i = 1; i <= nLevel; i++)
                    {
                        _f += "│&nbsp;";
                    }
                    Rn += _f + "│&nbsp;├";
                }
                Rn += "<a href='Default.aspx?F=";
                Rn = Rn + System.Web.HttpContext.Current.Server.UrlEncode(fInfo.FullName);
                Rn += "'>";
                Rn += fInfo.Name.ToString() + "</a><br />";
            }
            Rn = ListTreeShow(dirinfo, nLevel + 1, Rn);


        }
        return Rn;
    }

    public static string ListSelectShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录下拉框显示
    {
        DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录
        foreach (DirectoryInfo dirinfo in subDirectories)
        {
            Rn += "<option value=\"" +System.Web.HttpContext.Current.Server.UrlEncode( dirinfo.FullName) + "\" >";
            if (nLevel == 0)
            {
                Rn += "├";
            }
            else
            {
                string _s = "";
                for (int i = 1; i <= nLevel; i++)
                {
                    _s += "│&nbsp;";
                }
                Rn += _s + "├";
            }
            Rn += "" + dirinfo.Name.ToString() + "</option>";
            Rn = ListSelectShow(dirinfo, nLevel + 1, Rn);
        }
        return Rn;
    }
    protected void btn_select_Click(object sender, EventArgs e)
    {
        string first_dir = System.Web.HttpContext.Current.Server.UrlDecode(h_dir.Value);
          DirectoryInfo thisOne = new DirectoryInfo(first_dir);
          show_file.Text = ListTreeShow(thisOne, 0, "");
    }
    public bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)//下载文件
    {
        try
        {
            FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            BinaryReader br = new BinaryReader(myFile);
            try
            {
                _Response.AddHeader("Accept-Ranges", "bytes");
                _Response.Buffer = false;
                long fileLength = myFile.Length;
                long startBytes = 0;

                double pack = 10240; //10K bytes
                //int sleep = 200;   //每秒5次   即5*10K bytes每秒
                int sleep = (int)Math.Floor(1000 * pack / _speed) + 1;
                if (_Request.Headers["Range"] != null)
                {
                    _Response.StatusCode = 206;
                    string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });
                    startBytes = Convert.ToInt64(range[1]);
                }
                _Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
                if (startBytes != 0)
                {
                    //Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength-1, fileLength));
                }
                _Response.AddHeader("Connection", "Keep-Alive");
                _Response.ContentType = "application/octet-stream";
                _Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));

                br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
                int maxCount = (int)Math.Floor((fileLength - startBytes) / pack) + 1;

                for (int i = 0; i < maxCount; i++)
                {
                    if (_Response.IsClientConnected)
                    {
                        _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString())));
                        Thread.Sleep(sleep);
                    }
                    else
                    {
                        i = maxCount;
                    }
                }
            }
            catch
            {
                return false;
            }
            finally
            {
                br.Close();

                myFile.Close();
            }
        }
        catch
        {
            return false;
        }
        return true;
    }
    protected void btn_up_Click(object sender, EventArgs e)
    {
        if (file_up.HasFile)
        {
            try
            {
                string path = System.Web.HttpContext.Current.Server.UrlDecode(h_dir.Value);
                string file = file_up.FileName;
                file_up.SaveAs(path + "/" + file);
                DirectoryInfo thisOne = new DirectoryInfo(path);
                show_file.Text = ListTreeShow(thisOne, 0, "");
            }
            catch
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('上传文件失败,请重试');", true);
            }
        }
        else
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('请选择文件');", true);
        }
    }
}

效果

主要难点是对站点中的文件和目录递归树形显示

flash幻灯片

以前一直想写这个这个类此的东西,都苦于没有项目驱动,这次因项目需要,真的搞了一个出来

js代码(导入js文件未给出)

AC_FL_RunContent('type', 'application/x-shockwave-flash', 'data', 'img/advertising.swf?xml=ahsx/flash.ashx', 'width', '300', 'height','200', 'id', 'xifenfei_flash', 'movie', 'img/advertising?xml=ashx/flash.ashx');

c#生成类xml代码


System.Text.StringBuilder str = new System.Text.StringBuilder();
 str.Append("<data>  <channel>");
 str.Append("   <item><link>http://www.baidu.com</link>").Append("   <image>1.jpg</image>").Append("   <title>111111</title></item>");
 str.Append("  <item> <link>http://http://www.baidu.com</link>").Append("   <image>2.jpg</image>").Append("   <title>222222</title></item>");
 str.Append(" <item>   <link>http://www.baidu.com</link>").Append("   <image>3.jpg</image>").Append("   <title>333333</title></item>");
 str.Append("   <item> <link>http://www.baidu.com</link>").Append("   <image>1.jpg</image>").Append("   <title>444444</title></item>");
 str.Append("   <item> <link>http://www.baidu.com</link>").Append("   <image>2.jpg</image>").Append("   <title>555555</title></item>");
 str.Append("   <item> <link>http://www.baidu.com</link>").Append("   <image>3.jpg</image>").Append("   <title>666666</title></item>");
 str.Append(" </channel>");
 str.Append("</data>");
 context.Response.Write(str.ToString());

note:仅供测试,没有和数据库关联起来

flash幻灯片附件

fckeditor使用说明

在asp.net中使用fckeditor比freetextbox复杂的多,但是这个是完全开源,开源自己控制

配置:web.config中

<appSettings>
<add key="FCKeditor:BasePath" value="~/fckeditor/"/>
</appSettings>

修改fckcofig.js文件(主要)

var _FileBrowserLanguage    = 'aspx' ;
var _QuickUploadLanguage = 'aspx'; 

修改config.asx文件,主要是为了实现不同用户的文件夹放置位置不同


private bool CheckAuthentication()
 {
 if (Session["vip"] == null ||Session["vip"].ToString() == "")
 {
 Session["vip"] = "public";
 }
 return true;

}

UserFilesPath = "../../../../../upload/" + Session["vip"].ToString();

string file_path = folder.Create_folder("../../../../../upload/" + Session["vip"].ToString());
 UserFilesAbsolutePath = file_path;TypeConfig[ "Image" ].AllowedExtensions            = new string[] { "bmp", "gif", "jpeg", "jpg", "png" };
 TypeConfig[ "Image" ].DeniedExtensions            = new string[] { };
 TypeConfig[ "Image" ].FilesPath                    = "%UserFilesPath%"+Session["vip"].ToString()+"/";
 TypeConfig[ "Image" ].FilesAbsolutePath            = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );
 TypeConfig[ "Image" ].QuickUploadPath            = "%UserFilesPath%";
 TypeConfig[ "Image" ].QuickUploadAbsolutePath    = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );

修改后的fckeditor

网站流量统计

本程序采用.net平台和mysql数据库实现

mysql数据库中表:

CREATE TABLE `web_statistics` (
 `id` int(10) unsigned NOT NULL auto_increment,
 `Cur_url` varchar(500) NOT NULL,
 `Pre_url` varchar(500) NOT NULL default '未知',
 `Os` varchar(50) NOT NULL default '未知',
 `Ip` varchar(15) NOT NULL,
 `Browser` varchar(50) NOT NULL default '未知',
 `Access_Time` datetime NOT NULL,
 `Host_Name` varchar(45) NOT NULL default '未知',
 PRIMARY KEY  (`id`)
)

mysql存储过程:

CREATE  PROCEDURE `proc_statistics`(Cur_url varchar(500),Pre_url varchar(500),Os varchar(50),Brows varchar(50),Host_Name varchar(45),Ip varchar(15))
begin
insert into web_statistics(Cur_url,Pre_url,Os,Ip,Browser,Access_Time,Host_Name)
values(Cur_url,Pre_url,Os,Ip,Brows,now(),Host_Name);
end

ashx执行平台代码:

using System;
using System.Web;
using MySql.Data;
using MySql.Data.MySqlClient;
using MySql.Data.Types;
using System.Data;
public class Statistics : IHttpHandler {

 public void ProcessRequest (HttpContext context) {
 context.Response.ContentType = "image/jpg";
 string url_cur = "加载当前Url错误";
 string url_pre = "直接访问";
 if (context.Request.QueryString["d"] != null)
 {
 url_pre = System.Web.HttpContext.Current.Server.UrlDecode(context.Request.QueryString["d"].ToString()).Replace("`","&");
 if (url_pre == "")
 {
 url_pre = "直接访问";
 }
 }
 if (context.Request.QueryString["u"] != null)
 {
 url_cur = System.Web.HttpContext.Current.Server.UrlDecode(context.Request.QueryString["u"].ToString()).Replace("`", "&");
 }
 string[] data = GetData();
 string con_mysql = System.Configuration.ConfigurationManager.ConnectionStrings["mysql"].ToString();
 MySqlConnection conn;
 MySqlCommand cmd ;
 try
 {
 conn = new MySqlConnection(con_mysql);
 conn.Open();
 cmd = new MySqlCommand();
 cmd.Connection = conn;
 //存储过程实现

 cmd.CommandText = "proc_statistics";
 cmd.CommandType = CommandType.StoredProcedure;
 MySqlParameter para1 = new MySqlParameter("Cur_url", MySqlDbType.VarChar, 500);
 MySqlParameter para2 = new MySqlParameter("Pre_url", MySqlDbType.VarChar, 500);
 MySqlParameter para3 = new MySqlParameter("Os", MySqlDbType.VarChar, 50);
 MySqlParameter para4 = new MySqlParameter("Ip", MySqlDbType.VarChar, 15);
 MySqlParameter para5 = new MySqlParameter("Brows", MySqlDbType.VarChar, 50);
 MySqlParameter para7 = new MySqlParameter("Host_Name", MySqlDbType.VarChar, 45);
 para1.Value = url_cur;
 para2.Value = url_pre;
 para3.Value = data[1];
 para4.Value = data[3];
 para5.Value = data[2];
 para7.Value = data[0];
 cmd.Parameters.Add(para1);
 cmd.Parameters.Add(para2);
 cmd.Parameters.Add(para3);
 cmd.Parameters.Add(para4);
 cmd.Parameters.Add(para5);
 cmd.Parameters.Add(para7);

 //参数实现
 /*
 cmd.CommandType = CommandType.Text;
 //直接拼接字符串实现
 //string sql = "insert into web_statistics(Cur_url,Pre_url,Os,Ip,Browser,Access_Time,Host_Name)values('"+url_cur+"','"+url_pre+"','"+data[1]+"','"+data[3]+"','"+data[2]+"',now(),'"+data[0]+"')";
 //sql语句参数实现
 string sql = "insert into web_statistics(Cur_url,Pre_url,Os,Ip,Browser,Access_Time,Host_Name)values(?Cur_url,?Pre_url,?Os,?Ip,?Brows,now(),?Host_Name)";
 cmd.CommandText = sql;
 MySqlParameter para1 = new MySqlParameter("?Cur_url", MySqlDbType.VarChar,500);
 MySqlParameter para2 = new MySqlParameter("?Pre_url", MySqlDbType.VarChar, 500);
 MySqlParameter para3 = new MySqlParameter("?Os", MySqlDbType.VarChar, 50);
 MySqlParameter para4 = new MySqlParameter("?Ip", MySqlDbType.VarChar, 15);
 MySqlParameter para5 = new MySqlParameter("?Brows", MySqlDbType.VarChar, 50);
 MySqlParameter para7 = new MySqlParameter("?Host_Name", MySqlDbType.VarChar, 45);
 para1.Value = url_cur;
 para2.Value = url_pre;
 para3.Value = data[1];
 para4.Value = data[3];
 para5.Value=data[2];
 para7.Value = data[0];
 cmd.Parameters.Add(para1);
 cmd.Parameters.Add(para2);
 cmd.Parameters.Add(para3);
 cmd.Parameters.Add(para4);
 cmd.Parameters.Add(para5);
 cmd.Parameters.Add(para7);
 */

 cmd.ExecuteNonQuery();
 cmd.Dispose();
 conn.Close();
 }
 catch {}
 //输入图片
 string img_name = "statistics.jpg";
 //直接输出图片
 //  context.Response.WriteFile(context.Server.MapPath(img_name));

 //缓冲输出图片
 byte[] datas;
 if (HttpContext.Current.Cache["datacache"] != null)
 {
 datas = (byte[])HttpContext.Current.Cache["datacache"];
 }
 else
 {
 //记得修改文件图片名称
 datas = System.IO.File.ReadAllBytes(context.Server.MapPath(img_name));
 HttpContext.Current.Cache.Insert("datacache", datas, null, DateTime.MaxValue, TimeSpan.FromHours(12));
 }
 context.Response.OutputStream.Write(datas, 0, datas.Length);

 }

 public  string[] GetData()
 {
 string[] data = new string[4];
 string userAgent = System.Web.HttpContext.Current.Request.UserAgent == null ? "无" : System.Web.HttpContext.Current.Request.UserAgent;
 data[0] = System.Web.HttpContext.Current.Request.ServerVariables.Get("Remote_Host").ToString(); //主机名(暂时有问题)
 data[1] = System.Web.HttpContext.Current.Request.Browser.Platform.ToString() + ":" + GetOSNameByUserAgent(userAgent);//操作系统
 data[2] = System.Web.HttpContext.Current.Request.Browser.Browser.ToString() + ":" + System.Web.HttpContext.Current.Request.Browser.Version.ToString();//浏览器名称和版本
 string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
 if (null == result || result == String.Empty)
 {
 result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
 }
 if (null == result || result == String.Empty)
 {
 result = HttpContext.Current.Request.UserHostAddress;
 }
 data[3] = result;//ip地址
 return data;
 }
 private  string GetOSNameByUserAgent(string userAgent)
 {
 string osVersion = "未知";
 if (userAgent.Contains("NT 6.1"))
 {
 osVersion = "Windows 7/Server 2008 R2";
 }
 else if (userAgent.Contains("NT 5.2"))
 {
 osVersion = "Windows Server 2003";
 }
 else if (userAgent.Contains("NT 5.1"))
 {
 osVersion = "Windows XP";
 }
 else if (userAgent.Contains("NT 6.0"))
 {
 osVersion = "Windows Vista/Server 2008";
 }
 else if (userAgent.Contains("NT 5"))
 {
 osVersion = "Windows 2000";
 }
 else if (userAgent.Contains("Linux"))
 {
 osVersion = "Linux";
 }
 else if (userAgent.Contains("NT 4"))
 {
 osVersion = "Windows NT4";
 }
 else if (userAgent.Contains("Me"))
 {
 osVersion = "Windows Me";
 }
 else if (userAgent.Contains("98"))
 {
 osVersion = "Windows 98";
 }
 else if (userAgent.Contains("95"))
 {
 osVersion = "Windows 95";
 }
 else if (userAgent.Contains("Mac"))
 {
 osVersion = "Mac";
 }
 else if (userAgent.Contains("Unix"))
 {
 osVersion = "UNIX";
 }

 else if (userAgent.Contains("SunOS"))
 {
 osVersion = "SunOS";
 }
 return osVersion;
 }
 public bool IsReusable {
 get {
 return false;
 }
 }

}

实现调用:
因为我把本程序部署在dag.wzu.edu.cn域名的服务器上,所以可以直接通过html+js代码就可以实现客户端的访问统计功能

<img  style="width:0px;height:0px;border:0px" id="statistics_id_fei" /><script type="text/javascript"> window.onload = function () { document.getElementById("statistics_id_fei").src = "http://dag.wzu.edu.cn/statistics.ashx?d="+ encodeURI(document.referrer).replace('&', '`') + "&u=" + encodeURI(document.location.href).replace('&', '`') + "&x=" + Math.random(); }</script>

说明:

1、在执行文件ashx上,采用了多种可选方式,其中数据库方面有直接拼接sql,sql参数方法,存储过程调用三种方法;
2、为了能够是js中的onload事件能够执行,加载完ashx文件后,生成一个对应的图片文件,采用了直接加载cache缓存方式实现;
3、只要直接把这里的html和js代码复制到你网址的直接的任何地方就可以实现自己站点的访问量统计。

dropdownlist 省市县三级联动

因为开发环境是asp.net所以采用服务器端控件实现三级联动

HTML代码:


<asp:DropDownList ID="ddls" runat="server"></asp:DropDownList>

<asp:DropDownList ID="ddlc" runat="server"></asp:DropDownList>

<asp:DropDownList ID="ddlx" runat="server"></asp:DropDownList>

<input id="h_s" type="hidden"  runat="server"/>
 <input id="h_c" type="hidden" runat="server"/>
 <input id="h_a" type="hidden" runat="server"/>

note:hidden 是为了以后在c#代码中能够取到dropdownlist选中的值

js代码:

$(document).ready(function () {
 //选择省操作
 $("#ddls").change(function () {
 var selects_v = $("#ddls").val();
 $("#h_s").val(selects_v);
 if (selects_v == "0") {
 $("#ddlc option:first").attr("selected", "selected");
 $("#ddlx option:first").attr("selected", "selected");
 $("#ddlc").attr("disabled", "disabled");
 $("#ddlx").attr("disabled", "disabled");
 }
 else {
 $("#ddlc option").remove();
 $("#ddlc").attr("disabled", "");
 $("#ddlx option:first").attr("selected", "selected");
 $("#ddlx").attr("disabled", "disabled");
 $("#ddlc").append("<option value='0'>请选择市</option>");
 $.getJSON("./ashx/select_province.ashx?s=" + selects_v + "&a" + Math.random(), function (data) {
 $.each(data.root, function (id, item) {
 $("#ddlc").append("<option value='" + item.code + "'>" + item.name + "</option>");
 });
 });
 }
 });
 //ddlx选择市
 $("#ddlc").change(function () {
 var s_c = $("#ddlc").val();
 $("#h_c").val(s_c);
 if (s_c == "0") {
 $("#ddlx")[0].selectedIndex = 0;
 $("#ddlx").attr("disabled", "disabled");
 }
 else {
 $("#ddlx option").remove();
 $("#ddlx").attr("disabled", "");
 $("#ddlx").append("<option value='0'>请选择县</option>");
 $.getJSON("./ashx/select_city.ashx?s=" + s_c + "&a" + Math.random(), function (data) {
 $.each(data.root, function (id, item) {
 $("#ddlx").append("<option value='" + item.code + "'>" + item.name + "</option>");
 });
 });
 }
 });
 //选择对应的县
 $("#ddlx").change(function () {
 var s_a = $("#ddlx").val();
 $("#h_a").val(s_a);
 });
});

c#初始化dropdownlist数据

protected void Bindddls()
 {
 SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "get_province");
 ddls.DataTextField = "name";
 ddls.DataValueField = "code";
 ddls.DataSource = dr;
 ddls.DataBind();
 dr.Close();
 ddls.Items.Insert(0,new ListItem("请选择省", "0"));
 }
 protected void Bindddlc()
 {
 string sValue = ddls.SelectedValue;
 if (sValue == "0")
 {
 ddlc.Items.Add(new ListItem("请选择市", "0"));
 ddlc.Enabled = false;
 }
 else
 {
 SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "get_city");
 ddlc.DataTextField = "name";
 ddlc.DataValueField = "code";
 ddlc.DataSource = dr;
 ddlc.DataBind();
 dr.Close();
 ddlc.Items.Insert(0,new ListItem("请选择市", "0"));
 }
 }
 protected void Bindddla()
 {
 string cValue = ddlc.SelectedValue;
 if (cValue == "0")
 {
 ddlx.Items.Add(new ListItem("请选择县", "0"));
 ddlx.Enabled = false;
 }
 else
 {
 SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure, "get_area");
 ddlx.DataTextField = "name";
 ddlx.DataValueField = "code";
 ddlx.DataSource = dr;
 ddlx.DataBind();
 dr.Close();
 ddlx.Items.Insert(0, new ListItem("请选择县", "0"));
 }
 }

ashx文件代码

select_province.ashx文件


if (HttpContext.Current.Request["s"] != null)
 {
 string sv = HttpContext.Current.Request["s"].ToString();
 SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.StoredProcedure
 , "get_city", new SqlParameter("@sid", sv));
 string json = Object_Json.ToJson(dr);
 dr.Close();
 HttpContext.Current.Response.Write(json);
 HttpContext.Current.Response.End();
 }
 else
 {
 HttpContext.Current.Response.Write("error");
 HttpContext.Current.Response.End();
 }

select_city.ashx文件

if (HttpContext.Current.Request["s"] != null)
 {
 string sv = HttpContext.Current.Request["s"].ToString();
 System.Data.SqlClient.SqlDataReader dr = xifenfei.mssql.SqlHelper.ExecuteReader(xifenfei.mssql.SqlHelper.ConnectionStringLocalTransaction, System.Data.CommandType.StoredProcedure
 , "get_area", new System.Data.SqlClient.SqlParameter("@sid", sv));
 string json = Object_Json.ToJson(dr);
 dr.Close();
 HttpContext.Current.Response.Write(json);
 HttpContext.Current.Response.End();
 }
 else
 {
 HttpContext.Current.Response.Write("error");
 HttpContext.Current.Response.End();
 }

效果: