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选择一个具有特定类别的div

    选择一个具有特定类别的div 要选择具有特定类别的div,可以使用jQuery的选择器语法。类选择器是在类名前加上一个点号(.)。 例如,我们要选择所有类名为 “example-class” 的div,可以使用以下代码: $(‘.example-class’) 选择一个具有多个类别的div 如果要选择具有多个类别的div,可以在类名前用点号分隔它们。例如,我…

    jquery 2023年5月12日
    00
  • php如何处理setcookie失效的问题

    当调用php内置函数setcookie设置cookie时,如果在响应头中已经设置过了同名的cookie,新设置的将会覆盖旧的cookie。如果你希望更新已经存在的cookie而不是新建一个,必须设置它的过期时间为过去的任意时间。 但是,即使你做了这些,还是会有一些情况会导致已经过期的cookie仍然被使用。以下是一些常见的原因: 客户端机器上的时间错误(当前…

    jquery 2023年5月27日
    00
  • jQWidgets jqxDateTimeInput textchanged事件

    以下是关于“jQWidgets jqxDateTimeInput textchanged事件”的完整攻略,包含两个示例说明: 事件简介 textchanged 事件是 jQWidgets jqxDateTimeInput 控件的一个事件,用于在日期时间框的文本内容发变化时触发。该事件的语法如下: $("#jqxDateTime").on(…

    jquery 2023年5月10日
    00
  • ztree获取选中节点时不能进入可视区域出现BUG如何解决

    要解决该问题,我们需要了解ztree如何设置选中节点和如何使该节点在可视区域内。 设置选中节点 使用ztree获取选中节点,我们可以通过getSelectedNodes()方法来获取选中的节点数组。该方法可以直接返回节点对象数组。如果只需要获取单个选中的节点,可以使用方法getSelectedNodes()[0]。当我们获取到选中的节点后,就可以对其进行一系…

    jquery 2023年5月18日
    00
  • JQuery获取文本框中字符长度的代码

    获取文本框中字符长度是 JQuery 中常见的操作之一,以下是获取该长度的代码攻略: 1. JQuery获取文本框中字符长度的代码 使用 JQuery 可以使用 val() 方法获取文本框的值,在获取之后使用 length 属性获取字符长度。 var length = $("#input-id").val().length; consol…

    jquery 2023年5月28日
    00
  • jQuery UI Dialog类选项

    当使用jQuery UI Dialog类时,可以使用Dialog类选项来设置对话框的各种属性和行为。以下是详细的攻略,包含两个示例,演示如何使用Dialog类选项: 步骤1:引入库 在使用之前,需要先在HTML文件中引入jQuery库和jQuery UI库。可以通过以下方式引入: <link rel="stylesheet" hre…

    jquery 2023年5月9日
    00
  • jQuery bind事件使用详解

    jQuery bind事件使用详解 前言 在前端开发中,我们经常需要为DOM元素添加事件,比如“点击”、“鼠标移入移出”等事件。jQuery提供了一种方便的方式来绑定事件,那就是使用bind方法。本文将详细讲解jQuery bind事件的用法和相关注意事项。 jQuery bind事件的基本用法 bind方法可以用来为一些DOM元素绑定事件。其基本使用方法为…

    jquery 2023年5月28日
    00
  • JavaWeb响应下载功能实例代码(包含工具类)

    标题:JavaWeb响应下载功能实例代码(包含工具类)攻略 简介:本篇攻略将对JavaWeb中响应下载功能的实现进行详细讲解,介绍JavaWeb响应下载的基本原理以及必要的实现代码。最后附上工具类的完整代码,让读者能够轻松实现该功能。 基本原理 JavaWeb中响应下载功能的实现原理如下: 在用户请求下载资源时,服务器将该资源以流的形式传输给客户端。 在传输…

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