ASP.NET Ajax级联DropDownList实现代码

ASP.NET Ajax级联DropDownList实现代码攻略

在ASP.NET中,实现级联DropDownList的功能是非常常见的需求之一。本文将带领大家通过ASP.NET Ajax实现级联DropDownList的方法,包括如何构建后端数据源、在前端进行切换时实现DropDownList级联更新等。

1. 准备工作

在开始之前,我们需要确保以下几点:

  • ASP.NET框架版本在4.5以上;
  • 已安装ASP.NET Ajax扩展程序包(在NuGet中可下载);
  • 页面钩子函数已加载(通过Page_Load或Init函数实现)。

2. 构建后端数据源

我们需要准备两个DropDownList,一个用于选择父级,一个用于选择子级。为了实现两者之间的级联,我们需要为子级DropDownList动态加载可选项。

在后台代码中,我们需要编写一个返回子级选项列表的函数,并在父级DropDownList选项变更后触发它。

以下是一个示例,假设我们需要从服务端API中获取子级选项:

// 获取子级选项数据
protected string GetChildData(int parentId)
{
    // 向服务器API请求子级选项数据
    var client = new HttpClient();
    var result = client.GetAsync("http://api.example.com/childoptions?parentId=" + parentId).Result;

    // 处理服务器响应并返回JSON格式数据
    if (result.IsSuccessStatusCode)
    {
        var options = result.Content.ReadAsStringAsync().Result;
        return options;
    }
    else
    {
        return "[]"; // 返回空数据
    }
}

该函数将根据传入的parentId参数向服务端API请求子级选项数据,并返回JSON格式数据。

3. 为父级DropDownList添加选项变更事件

在页面载入时,我们需要为父级DropDownList添加选项变更事件。该事件将会在页面初始化时运行一次,并在父级DropDownList切换选项时自动触发。

以下是一个示例,假设我们的页面中存在名为"parentDropDownList"和"childDropDownList"的DropDownList:

<script type="text/javascript">
    // 父级选项列表更改事件处理函数
    function parentDropDownList_Changed() {
        var parentId = $(this).val(); // 获取当前选中项的值

        // 如果父选项列表有选中项
        if (parentId) {
            // 向服务器API获取子级选项数据
            $.ajax({
                type: "GET",
                url: "/api/getchild/" + parentId, // 访问服务器API的接口
                contentType: "application/json;charset=utf-8",
                dataType: "json",
                success: function(result) {
                    // 从服务器API成功获取到数据
                    // 将子级选项列表删除旧的选项
                    $("#childDropDownList option").each(function() {
                        $(this).remove();
                    });

                    // 将新的选项添加到子级选项列表
                    $.each(result, function(i, item) {
                        $("#childDropDownList").append($('<option>', {
                            value: item.Value,
                            text: item.Text
                        }));
                    });
                },
                error: function(err) {
                    // 访问服务器API失败,输出错误信息
                    console.log(err.statusText);
                }
            });
        }
    }

    // 页面初始化时注册父级选项列表更改事件
    $(function() {
        $("#parentDropDownList").change(parentDropDownList_Changed);
    });
</script>

4. 完整代码示例

以下是一个完整的ASP.NET Ajax级联DropDownList代码示例,展示了如何实现级联DropDownList的功能。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<%@ Register TagPrefix="ajaxToolkit" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></ajaxToolkit:ToolkitScriptManager>
        <div>
            <div>
                <asp:DropDownList ID="parentDropDownList" runat="server" Width="200px">
                    <asp:ListItem Text="父级选项1" Value="1"></asp:ListItem>
                    <asp:ListItem Text="父级选项2" Value="2"></asp:ListItem>
                    <asp:ListItem Text="父级选项3" Value="3"></asp:ListItem>
                </asp:DropDownList>
            </div>
            <div>
                <asp:DropDownList ID="childDropDownList" runat="server" Width="200px"></asp:DropDownList>
            </div>
        </div>
    </form>
    <script type="text/javascript">
        // 父级选项列表更改事件处理函数
        function parentDropDownList_Changed() {
            var parentId = $(this).val(); // 获取当前选中项的值

            // 如果父选项列表有选中项
            if (parentId) {
                // 向服务器API获取子级选项数据
                $.ajax({
                    type: "GET",
                    url: "/api/getchild/" + parentId, // 访问服务器API的接口
                    contentType: "application/json;charset=utf-8",
                    dataType: "json",
                    success: function(result) {
                        // 从服务器API成功获取到数据
                        // 将子级选项列表删除旧的选项
                        $("#childDropDownList option").each(function() {
                            $(this).remove();
                        });

                        // 将新的选项添加到子级选项列表
                        $.each(result, function(i, item) {
                            $("#childDropDownList").append($('<option>', {
                                value: item.Value,
                                text: item.Text
                            }));
                        });
                    },
                    error: function(err) {
                        // 访问服务器API失败,输出错误信息
                        console.log(err.statusText);
                    }
                });
            }
        }

        // 页面初始化时注册父级选项列表更改事件
        $(function() {
            $("#parentDropDownList").change(parentDropDownList_Changed);
        });
    </script>
</body>
</html>

5. 代码说明

  • 第3段代码展示了获取子级选项数据的后端代码逻辑,该函数应在服务端API中实现,并返回JSON格式数据。
  • 第4段代码展示了为父级DropDownList添加选项变更事件,该事件将在页面初始化时运行一次,并在父级DropDownList切换选项时自动触发子级选项的数据更新。
  • 第5段至第40码展示了一个完整的ASP.NET Ajax级联DropDownList实现代码示例,包括前端和后端代码。在该示例中,我们使用了一个名为"api/getchild"的服务器API和一个名为"childDropDownList"的子级DropDownList,需要根据实际情况进行修改。

6. 示例应用

下面是两个示例代码,他们分别演示了通过ASP.NET WebForms和MVC实现级联DropDownList的功能。

ASP.NET WebForms示例

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register TagPrefix="ajaxToolkit" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></ajaxToolkit:ToolkitScriptManager>
        <div>
            <div>
                <asp:DropDownList ID="parentDropDownList" runat="server">
                    <asp:ListItem Text="请选择" Value=""></asp:ListItem>
                    <asp:ListItem Text="北京市" Value="1"></asp:ListItem>
                    <asp:ListItem Text="上海市" Value="2"></asp:ListItem>
                    <asp:ListItem Text="广州市" Value="3"></asp:ListItem>
                    <asp:ListItem Text="深圳市" Value="4"></asp:ListItem>
                </asp:DropDownList>
            </div>
            <div>
                <asp:DropDownList ID="childDropDownList" runat="server"></asp:DropDownList>
            </div>
        </div>
    </form>
    <script type="text/javascript">
        // 父级选项列表更改事件处理函数
        function parentDropDownList_Changed() {
            var parentId = $(this).val(); // 获取当前选中项的值

            // 如果父选项列表有选中项
            if (parentId) {
                // 向服务器API获取子级选项数据
                $.ajax({
                    type: "GET",
                    url: "/getchild.ashx?parentid=" + parentId, // 访问服务器API的接口
                    contentType: "application/json;charset=utf-8",
                    dataType: "json",
                    success: function(result) {
                        // 从服务器API成功获取到数据
                        // 将子级选项列表删除旧的选项
                        $("#childDropDownList option").each(function() {
                            $(this).remove();
                        });

                        // 将新的选项添加到子级选项列表
                        $.each(result, function(i, item) {
                            $("#childDropDownList").append($('<option>', {
                                value: item.Value,
                                text: item.Text
                            }));
                        });
                    },
                    error: function(err) {
                        // 访问服务器API失败,输出错误信息
                        console.log(err.statusText);
                    }
                });
            }
        }

        // 页面初始化时注册父级选项列表更改事件
        $(function() {
            $("#parentDropDownList").change(parentDropDownList_Changed);
        });
    </script>
</body>
</html>

ASP.NET MVC4示例

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<body>
    <div>
        @using (Html.BeginForm())
        {
            @Html.DropDownList("Parent", (SelectList)ViewBag.ParentList, "-请选择-", new { @id = "parent", @value = "" })
            <br />
            <br />
            @Html.DropDownList("Child", new SelectList(Enumerable.Empty<SelectListItem>(), "Value", "Text"), "-请选择-", new { @id = "child", @value = "" })
        }
    </div>
    <script type="text/javascript">
        $(function () {
            $("#parent").change(function () {
                $.getJSON("@Url.Action("GetChild", "Home")", { parentid: $("#parent").val() }, function (data) {
                    var items = "<option>-请选择-</option>";
                    $.each(data, function (i, item) {
                        items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
                    });
                    $("#child").html(items);
                });
            });
        });
    </script>
</body>
</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Ajax级联DropDownList实现代码 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • jQuery Mobile Button Widget iconpos选项

    以下是使用jQuery Mobile Button Widget iconpos选项的完整攻略: 首先,需要在HTML文件中引入jQuery Mobile库。可以通过以下代码实现: <head> <meta charset="-"> <meta name="viewport" conten…

    jquery 2023年5月11日
    00
  • jQWidgets jqxDropDownButton initContent属性

    jQWidgets jqxDropDownButton initContent属性详解 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包。jqxDropDownButton是Widgets组件于实现下拉按钮的组件。本文将详细介绍jqxDropDownButton的initContent属性,包括其作用、语法和示例。 jqxDr…

    jquery 2023年5月10日
    00
  • jQuery获取选中内容及设置元素属性的方法

    jQuery是一款优秀的JavaScript库,它可以让开发者更加轻松地操作HTML文档、事件处理、动画效果等操作。本篇攻略将会介绍如何使用jQuery获取选中内容及设置元素属性的方法。 获取选中内容 在jQuery中,可以使用val()方法获取表单元素的值,例如: var textareaVal = $("textarea").val(…

    jquery 2023年5月28日
    00
  • jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)

    下面就为您讲解jQuery图片旋转插件jQueryRotate.js的完整使用攻略。 1. 什么是jQueryRotate.js插件? jQueryRotate.js是一款用于图片旋转的jQuery插件,通过它可以轻松实现图片的360度旋转效果,同时也支持多个图片旋转的叠加效果。 2. 如何使用jQueryRotate.js插件? 2.1 下载jQueryR…

    jquery 2023年5月28日
    00
  • 如何用jQuery发送动态键值对到PHP

    下面是用jQuery发送动态键值对到PHP的完整攻略。 1. 准备工作 在开始之前,我们需要确保以下几个条件已经满足: 安装并引入jQuery库文件 学习并掌握jQuery的基本语法和常用方法 了解PHP的基本语法和使用方法 2. 发送动态键值对 要发送动态键值对到PHP,可以使用jQuery的$.ajax()方法。该方法可以通过POST请求向服务器发送数据…

    jquery 2023年5月12日
    00
  • jQuery 事件

    jQuery事件是指在HTML元素上发生的动作或事件,例如单击、双击、鼠标移动等。以下是详细的攻略: 绑定事件处理程序 要绑定事件处理程序,可以使用jQuery的.on()方法。以下是一个示例: $(document).ready(function() { // Get the button element var button = $(‘#myButton…

    jquery 2023年5月9日
    00
  • jQWidgets jqxGrid columnresized 事件

    以下是关于“jQWidgets jqxGrid columnresized 事件”的完整攻略,包含两个示例说明: 简介 jqxGrid 控件 columnresized 事件在列宽度调整时触发。 完整攻略 以下是 jqxGrid 控件 columnresized 事件的完整攻略: 监听 columnresized 事件 $("#jqxgrid&qu…

    jquery 2023年5月11日
    00
  • Underscore.js _.contains函数

    Underscore.js是JavaScript中一个备受欢迎的函数式编程库。它提供了许多方便的函数和工具,使得处理数据集合和对象变得更加容易。其中的_.contains函数可以用来检查给定的集合或字符串中是否包含了指定的值。 函数定义 _.contains(list, value, [fromIndex])- list(集合): 要被检查的集合,可以是数组…

    jquery 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部