zoukankan      html  css  js  c++  java
  • c#下简单的Ajax例子——Ajax.dll

    小研究了一下如何用Ajax.dll实现上一个例子,很沮丧,因为使用人家的方法,更简单,代码更少,而且仅仅是它的皮毛而已。所以,如果做项目要用到Ajax,建议研究一下框架,比如说Ext。它的类库和文档相当丰富,简单易上手。

        好吧,我把实现过程列出来。首先我们需要一个Ajax.dll文件,这个自己去找吧!放到项目中,并添加好引用。首先,你需要一个类,随意命名为“AjaxMethod.cs”代码如下:

        namespace Test.AjaxTest

        {

        /// <summary>

        /// AjaxMethod 的摘要说明。

        /// </summary>

        public class AjaxMethod

        {

        public AjaxMethod() {}

        //数据库查询操作

        [Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)]

        public DataSet GetList(string id)

        {

        string sql = "select CityName,CityCode from City where [ID]=" + id;

        return SelectData(sql); //调用下面的方法

        }

        //

        private DataSet SelectData(string sql)

        {

        //数据库链接定义:

        //Web.config中<configuration><appSettings></appSettings></configuration>

        //中添加定义:<add key="ConnectionString" value="data source=localhost;

        // initial catalog=helpdesk1; user id=sa; password=sa; "></add>

        string cs = System.Configuration.ConfigurationSettings .AppSettings["ConnectionString"];

        //或者直接这样定义

        //string cs = "Server=(local);UID=sa;PWD=sa;Database=HelpDesk1";

        SqlDataAdapter sda = new SqlDataAdapter(sql,cs);

        DataSet ds = new DataSet();

        sda.Fill(ds);

        return ds;

        }

        }

        }

      接下来是你要实现效果的页面a.aspx,<body>部分很简单:

        <body>

        <form id="Form1" method="post" runat="server">

        <select id="AList" onchange="GetBList()">

        <option value="0">A</option>

        <option value="1">B</option>

        <option value="2">C</option>

        </select>

        <select id="BList"></select>

        </form>

        </body>    当页面触发onchange事件,便进入了GetBList()方法,下面是该页面完整的js: <script language="javascript">

        function GetBList() {

        //调用数据库操作方法

        var av = document.getElementById("AList").value;

        // 调用AjaxMethod类的方法,至于这里有两个参数,猜想是一个委托,// 将GetList执行结果DataSet传递给SetBList方法,隐藏了AjaxMethod.GetList(av, SetBList);

        }

        function SetBList(response) {

        if(response != null) { var ds = response.value;  // 返回集

        // 这里很有特色,开始我感觉出错了,怎么js的语法规则跟c#一样啊// 可见Ajax.dll里面的正则应该写的暴强!不过有一点让人感觉不爽// 我在测试时,将ds.Tables[0].Rows.lenght写成了ds.Tables[0].Rows.Count // js会找不到对象的错误。

        // 如此等于,我们还是要习惯它的规则,毕竟不完全是c#,它只是定义了一种跟c#

        //非常接近的语法规则而已

        if(ds != null && typeof(ds) == "object" && ds.Tables != null) { alert(ds.Tables[0].Rows.length);

        for(var i=0;i<ds.Tables[0].Rows.length;i++) { var option = document.createElement("OPTION");

        option.value = ds.Tables[0].Rows[i].CityCode;

        option.text = ds.Tables[0].Rows[i].CityName;

        document.Form1.BList.options.add(option);

        }

        }

        }

        }

        </script>

        如此例子便结束了,很多繁复的操作都封装了。我们学到的只是如何用,仅此而已,不过在我们赶项目的时候,确实能带来很多的方便。

        补充:按照上面的方式配置,会得到一个异常,就是无法识别AjaxMethod类的异常,我们需要在页面的后台cs文件中,添加定义:Ajax.Utility.RegisterTypeForAjax(typeof(完整命名空间.AjaxMethod));

        除了这里要添加注册定义之外,我们还需要在web.config中添加:

        <httpHandlers>

        <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />

        </httpHandlers>

        延伸:我们完全可以将AjaxMethod写成一个公共Page,将调用业务层代码的方法添加进来。如此,便可以不用在那里面定义数据库链接了——我们要得到的仅仅是一个DataTable,而不必关心用什么样的方式得到它。这样的设计与项目框架的结合将更紧密。

  • 相关阅读:
    ubuntu-18.04自动配置脚本
    Nodejs on windows 10
    终端接收FFMEPG推送的流出现音频卡顿问题
    FFMPEG 4.0 版本 支持PSI设置
    FFMPEG 支持https协议
    FFmpeg修改AC3编码的描述子
    FFMPEG 设置socket缓冲区
    将 h264 格式转换为YUV数据
    将 YUV 数据 编码为 h.264 格式
    将 PCM 数据编码为AAC格式
  • 原文地址:https://www.cnblogs.com/liufei88866/p/1597306.html
Copyright © 2011-2022 走看看