我正在尝试将 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 服务中的服务引用添加到我的应用程序项目中。
我没有详细阅读所有内容,但是如果您添加的话会有帮助吗
AutoPostBack="True"
到 DropDownList 控件?