zoukankan      html  css  js  c++  java
  • 基于ASP.NET AJAX 的级联菜单

    刚接触AJAX的时候,觉得它太神奇了,把每提交一次就要刷新、整个页面抖动一下的网页变的和桌面程序一样,不再刷新,不再抖动。

    因此我对它产生了莫大的好感,我喜欢在网页中的某个角落落下它的身影。而且,它的使用是如此的简单,仅仅需要拖两个控件,就能发挥它的神奇功效,何乐而不为。

    但是不久后,当我知道这种直接拖控件的方法并不是真正的局部回传,我对我原先的做法立刻产生了排斥心理,我不喜欢这种骗人眼球的东西。

    前几天抽空看了几篇WEBCAST上的AJAX教程,收获不小,终于掌握了不用UpdatePanel控件的AJAX使用方式,虽然只是碰到了AJAX的一点门道,但至少实现了真是的局部回传。在此分享一下小小的成果。

    • 首先需要有级联关系的数据,简单点:这里就用物品类型表(Type)物品表(Articles)吧。
    • 确保已经安装AS.NET AJAX,新建一个空的网站,添加一个新页面。拖两个下拉列表控件(select),Body内代码如下
    <body>
    <form id="form1" runat="server">
    <div>
    <select id="DDLtype" name="D1" runat ="server">
    <option></option>
         </select>
    <select id="DDLarticle" name="D2">
    <option></option>
    </select>
    </div>
    </form>
    </body>

    DDLtype加上runat ="server"属性,在页面载入时就获取物品类型数据。。

    • 接下来编写通过物品类型Id获取物品列表的Webservice,代码如下
    //以下属性必须
    [System.Web.Script.Services.ScriptService]
    public class WebSer : System.Web.Services.WebService
    {
    public WebSer()
    {
    }
    //如果返回类型dataset这样的复杂类型(引用套引用),需要在web。config文件中进行配置。
    //Ariticle类只包含简单数据类型
    [WebMethod]
    public ICollection<Article> GetArticles(int typeId)
    {
    companyEntities ne
    = new companyEntities();
    var result
    = from p in ne.Articles
    where p.Type.Id == typeId
    select
    new Article
    {
    Id
    = p.Id,
    Name
    = p.Name
    };
    return result.AsEnumerable().Cast<Article>().ToList();
    }
    }
    • 接下来在页面中添加ScriptManager控件,并添加刚才编写的WebService的引用,之后页面代码如下
    <body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
    <asp:ServiceReference Path="WebService.asmx" />
    </Services>
    </asp:ScriptManager>
    <div>
    <select id="DDLtype" name="D1" runat ="server" >
    <option></option>
    </select>
    <select id="DDLarticle" name="D2">
    <option></option>
    </select>
    </div>
    </form>
    </body>
    • 编写JS代码,编写下拉列表的事件函数与客户端访问webService获取数据的代码
    <script type ="text/javascript" >
    //getArticles为DDLtype的onchange事件函数
    function getArticles(ddl) {
    var id = ddl.options[ddl.selectedIndex].value;
    //WebSer为WebService的类名,
    //GetArticles为WebSer类中的函数名
    //getArticlesSucceed为调用成功后调用的回调函数
    WebSer.GetArticles(id, getArticlesSucceed);
    }
    //成功返回后,参数result应该为一个数组
    function getArticlesSucceed(result) {
    var ddl = document.getElementById("DDLarticle");
    ddl.options.length
    = 0;
    for (i = 0; i < result.length; i++) {
    var option = document.createElement("OPTION");
    //直接通过属性访问数据
    option.value = result[i].Id;
    option.text
    = result[i].Name;
    ddl.options.add(option);
    }
    }
    </script>

    搞定。。。。

  • 相关阅读:
    批处理命令之实现修改环境变量的值
    【hihocoder 1304】搜索一·24点
    【hihocoder 1297】数论四·扩展欧几里德
    【hihocoder 1298】 数论五·欧拉函数
    【hihocoder 1303】模线性方程组
    C语言如何动态分配二维数组
    Istream中的函数
    string 与 char * 转换
    boost 系列 1:boost 直接使用
    glog功能介绍 一分钟 51CTO技术博客
  • 原文地址:https://www.cnblogs.com/xxfss2/p/1783337.html
Copyright © 2011-2022 走看看