AjaxToolkit CascadingDropdown 正在填充第一个父级,但未填充子级,因为knownCategoryValues 参数为空

问题描述 投票:0回答:1

我正在尝试将 ajaxToolKit CascadingDropdown 与从 ASMX WebService 填充的三个 DropdownList 控件一起使用。第一个下拉列表已正确填充,但是当我在第一个下拉列表中选择一个值时,子下拉列表未填充,甚至未命中断点。

当我使用 Visual Studio 测试 ASMX WebService 时,我可以获得预期的结果,但是在测试应用程序时,填充子下拉列表的 Web 方法不会被调用,并且knownCategoryValues参数(应包含 key:value )父下拉列表中的所选项目为空。我假设 Ajax 由于某种原因没有发送所选值,但我在代码中找不到问题。任何提示将不胜感激。

这是 aspx 标记

<div class="card-body">
                <div class="row mb-2 d-flex flex-column">
                    <div class="col">
                        <div class="form-group">
                            <label class="form-label">País</label>

                            <asp:DropDownList ID="ddlPais" runat="server" CssClass="form-select form-select-sm" ></asp:DropDownList>
                            <ajaxToolkit:CascadingDropDown ID="cdlPais" TargetControlID="ddlPais" PromptText="Seleccione País"
                                PromptValue="" ServicePath="~/services/WebService1.asmx" ServiceMethod="GetPaisAcceso"
                                runat="server" Category="CategoryPais" LoadingText="Cargando..." />
                        </div>
                    </div>
                    <div class="col">
                        <div class="form-group">
                            <label class="form-label">Empresa</label>
                            <asp:DropDownList ID="ddlEmpresa" runat="server" CssClass="form-select form-select-sm" ></asp:DropDownList>
                            <ajaxToolkit:CascadingDropDown ID="cdlEmpresa" TargetControlID="ddlEmpresa" PromptText="Seleccione Empresa" PromptValue="" ServicePath="~/services/WebService1.asmx"
                                ServiceMethod="GetEmpresaAcceso" runat="server" ParentControlID="ddlPais" Category="CategoryEmpresa" LoadingText="Cargando..." />
                        </div>
                    </div>
                    <div class="col">
                        <div class="form-group">
                            <label class="form-label">Puesto</label>
                            <asp:DropDownList ID="ddlPuesto" runat="server" CssClass="form-select form-select-sm"></asp:DropDownList>
                            <ajaxToolkit:CascadingDropDown ID="cdlPuesto" TargetControlID="ddlPuesto" PromptText="Seleccione Puesto" PromptValue="" ServicePath="~/services/WebService1.asmx" ServiceMethod="GetPuestoAcceso" ParentControlID="ddlEmpresa" runat="server" Category="CategoryPuesto" LoadingText="Cargando..."  />
                        </div>
                    </div>

                    <div class="col">
                        <hr />
                        <asp:Button ID="btnGuardar" runat="server" CssClass="btn btn-success" OnClick="btnGuardar_OnClick" Text="Guardar Cambios" />
                    </div>
                </div>
            </div>

以及 asmx Web 服务的代码

using AjaxControlToolkit;
using FACTURACION_CLASS;
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.CompilerServices;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;

namespace WebAppVB.services
{
    /// <summary>
    /// Summary description for WebService1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService]
    public class WebService1 : WebService
    {
        private readonly seguridad _seguridad = new seguridad();
        private readonly database _database = new database();

        private string _codigoUser = HttpContext.Current.Request.Cookies["CodigoUser"]?.Value;

        /// <summary>
        /// ?????
        /// </summary>
        /// <param name="knownCategoryValues"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        [WebMethod]
        public CascadingDropDownNameValue[] GetPaisAcceso(string knownCategoryValues)
        {
            string sql = $"SELECT * FROM GetPaisesAccesoUsuario({_codigoUser})";
            List<CascadingDropDownNameValue> paises = GetData(sql);
            return paises.ToArray();
        }

        /// <summary>
        /// ?????
        /// </summary>
        /// <param name="knownCategoryValues"></param>
        /// <returns></returns>
        /// <remarks></remarks>

        [WebMethod]
        public CascadingDropDownNameValue[] GetEmpresaAcceso(string knownCategoryValues)
        {
            string pais = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)["CategoryPais"];
            string sql = $"SELECT * FROM GetEmpresasAccesoUsuario({_codigoUser}, {pais})";

            List<CascadingDropDownNameValue> empresas = GetData(sql);
            return empresas.ToArray();
        }

        /// <summary>
        /// ?????
        /// </summary>
        /// <param name="knownCategoryValues"></param>
        /// <returns></returns>
        /// <remarks></remarks>
        [WebMethod]
        public CascadingDropDownNameValue[] GetPuestoAcceso(string knownCategoryValues)
        {
            string empresa = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)["CategoryEmpresa"];
            string sql = $"SELECT * FROM GetPuestosAccesoUsuario({_codigoUser}, {empresa})";

            List<CascadingDropDownNameValue> puestos = GetData(sql);
            return puestos.ToArray();
        }

        [WebMethod]
        private List<CascadingDropDownNameValue> GetData(string sql)
        {
            List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();

            using (OleDbConnection dbCon = new OleDbConnection(_seguridad.conn))
            {
                dbCon.Open();

                OleDbCommand cmd = new OleDbCommand(sql, dbCon);
                using (OleDbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        values.Add(new CascadingDropDownNameValue
                        {
                            name = reader[1].ToString(),
                            value = reader[0].ToString()
                        });
                    }

                    return values;
                }
            }
        }
     }

我尝试卸载 ajaxToolKit 并重新安装,检查我的引用,我还将 Web 服务中的服务引用添加到我的应用程序项目中。

asp.net webforms asp.net-ajax ajaxcontroltoolkit cascadingdropdown
1个回答
0
投票

我没有详细阅读所有内容,但是如果您添加的话会有帮助吗

AutoPostBack="True"

到 DropDownList 控件?

© www.soinside.com 2019 - 2024. All rights reserved.