Quizás "excelente" genere muchas críticas, pero creo que es realmente bueno. Miré alrededor de 20 listas desplegables vinculadas sin actualizarlas y eran un desastre en Firefox. Casi hago dos para esto. , cómo mantener el valor del segundo cuadro de lista después de enviar el formulario, porque si agrega entradas al cuadro desplegable a través de js, su estado no se guardará. Plataforma de prueba: es decir, 6, Firefox.
Función: Enlace sin actualización de segundo nivel Características: Navegador cruzado; envíe el formulario para obtener el valor del segundo cuadro desplegable, los datos provienen de la base de datos; use xmlhttp para enviar solicitudes para lograr solicitudes sin actualización; Encuentra un método mejor, por favor dímelo, muchas gracias, tus críticas y sugerencias son un gran estímulo para mí.
formulario web1.aspx:
<%@ Idioma de página="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Hereda="drop.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transicional//ES" >
<HTML>
<CABEZA>
<título>Formulario web1</título>
<meta nombre="GENERADOR" Contenido="Microsoft Visual Studio .NET 7.1">
<meta nombre="CODE_LANGUAGE" Contenido="C#">
<meta nombre="vs_defaultClientScript" contenido="JavaScript">
<meta nombre="vs_targetSchema" content=" http://schemas.microsoft.com/intellisense/ie5 ">
<lenguaje de escritura="javascript">
// La función jb inicializará un objeto xmlhttp según los diferentes navegadores
función jb()
{
var A=nulo;
intentar
{
A=nuevo ActiveXObject("Msxml2.XMLHTTP");
}
captura (e)
{
intentar
{
A=nuevo ActiveXObject("Microsoft.XMLHTTP");
}
atrapar (oc)
{
A = nulo
}
}
if (!A && tipo de XMLHttpRequest!= "indefinido")
{
A=nueva solicitud XMLHttp()
}
devolver un
}
// La siguiente función Go se llama cuando el cuadro de lista principal cambia y el parámetro es el elemento seleccionado.
función Ir(obj)
{
//Obtener el valor de la lista desplegable del cuadro de selección
var valor = obj.valor;
//Definir la página para procesar datos
var weburl = "webform1.aspx?parent_id="+svalue;
//Inicializa un objeto xmlhttp
var xmlhttp = jb();
// Envíe datos, el primer parámetro es preferiblemente obtener y el tercer parámetro es preferiblemente verdadero
xmlhttp.open("obtener",weburl,true);
// alerta(xmlhttp.responseText);
//Si los datos han sido devueltos exitosamente
xmlhttp.onreadystatechange=función()
{
if(xmlhttp.readyState==4)//4 representa una devolución exitosa de datos
{
var resultado = xmlhttp.responseText;//Obtener los datos devueltos por el servidor
//Primero borra todos los elementos desplegables de dListChild
document.getElementById("dListChild").length = 0;
//Agrega todos los modelos a dListChild. Tenga en cuenta que la opción no es una opción.
document.getElementById("dListChild").options.add(new Option("Todos los modelos","0"));
if(result!="")//Si los datos devueltos no están vacíos
{
//Dividimos la cadena recibida en matrices según
var allArray = resultado.split(",");
// Repita esta matriz, tenga en cuenta que comienza desde 1, porque el primer carácter de la cadena recibida es, por lo que la primera matriz después de la división está vacía
para(var i=1;i<allArray.length;i++)
{
//Dividimos esta cadena en matrices según |
var thisArray = allArray[i].split("|");
//Añadir entradas a dListChild
document.getElementById("dListChild").options.add(new Option(thisArray[1].toString(),thisArray[0].toString()));
}
}
}
}
//Enviar datos, preste atención al orden y los parámetros Los parámetros deben ser nulos o "".
xmlhttp.send(nulo);
}
</script>
</CABEZA>
<cuerpo MS_POSITIONING="GridLayout">
<id de formulario="Form1" método="publicación" runat="servidor">
<asp:DropDownList onchange="Go(this)" id="dListParent" style="ÍNDICE Z: 101; IZQUIERDA: 248px; POSICIÓN: absoluta; ARRIBA: 40px"
runat="servidor">
<asp:ListItem Value="100">Motorola</asp:ListItem>
<asp:ListItem Value="101">Nokia</asp:ListItem>
</asp:ListaDesplegable>
<asp:DropDownList id="dListChild" style="ÍNDICE Z: 102; IZQUIERDA: 248px; POSICIÓN: absoluta; ARRIBA: 104px"
runat="servidor"></asp:DropDownList>
<asp:Botón id="Botón1" estilo="ÍNDICE Z: 103; IZQUIERDA: 256px; POSICIÓN: absoluta; ARRIBA: 176px" runat="servidor"
Texto="Botón"></asp:Botón>
</formulario>
</cuerpo>
</HTML>
Backend webform1.aspx.cs:
usando Sistema;
usando System.Collections;
usando System.ComponentModel;
usando System.Data;
usando System.Drawing;
usando System.Web;
usando System.Web.SessionState;
utilizando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.HtmlControls;
usando System.Configuration;
usando
la caída del espacio de nombres
System.Data.SqlClient;
{
/// <resumen>
/// Descripción resumida de WebForm1.
/// </summary>
clase pública WebForm1: System.Web.UI.Page
{
protegido System.Web.UI.WebControls.DropDownList dListParent;
protegido System.Web.UI.WebControls.Button Button1;
protegido System.Web.UI.WebControls.DropDownList dListChild;
Page_Load vacío privado (remitente del objeto, System.EventArgs e)
{
//Pon el código de usuario aquí para inicializar la página
//si(!IsPostBack)
//{
BindDrop();// Si no se envía de nuevo, vincule el cuadro de lista
//}
}
BindDrop vacío protegido()
{
//En primer lugar, quiero que la lista desplegable principal también esté vinculada a la base de datos, pero no creo que sea necesario más adelante.
//si(!IsPostBack)
//{
// Vincular padre dListParent
//BindParent();
//}
//Obtiene el valor parent_id pasado, si es la primera solicitud, será nulo
cadena cadena = Request.QueryString["parent_id"];
cadena str1 = dListParent.SelectedValue;;
Respuesta.Escribir(str1);
// ¡Si str agrega una cadena! = la cadena original, significa que se ha activado el evento onchange de dListParent
si((cadena+"abc")!="abc")
{
// Vincula el control dListChild
BindChild(str);//Utilice el valor pasado de la DropDownList principal como parámetro
}
demás
BindParent(str1);
}
BindParent vacío protegido (cadena de cadena)
{
//Si es la primera solicitud o la página se actualiza, se seleccionará según el valor de dListParent.
//Convierte parámetros a int
int i = Convert.ToInt32(cadena);
dListChild.Items.Clear();
dListChild.Items.Add(new ListItem("Todos los modelos","0"));
//Obtener la cadena de conexión de la base de datos
cadena connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
//Inicializa un objeto de conexión
Conexión SqlConnection = nueva SqlConnection(connStr);
// declaración de base de datos
string commStr = string.Format("seleccione type_value,type_text de phone_type donde parent_id={0}",i);
//Crear objeto de comando de base de datos
comunicación SqlCommand = nuevo SqlCommand(commStr,conn);
//Abrir la base de datos
conexión.Open();
//Ejecutar comando
SqlDataReader dr = comm.ExecuteReader();
//Recorre dr y agrega entradas a dListParent
mientras (dr.Read())
{
dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
//También puede ser así
//dListParent.Items.Add(new ListItem(dr["phone_text"].ToString(),dr["phone_value"].ToString()));
}
dListParent.Items[0].Selected = verdadero;
// Agregar lo siguiente significa que el estado del segundo dListChild se puede guardar cuando se hace clic en el botón Enviar para enviar el formulario.
dListChild.SelectedValue = Solicitud.Form["dListChild"];
dr.Cerrar();
conexión.Cerrar();
}
vacío protegido BindChild (cadena cadena)
{
//El contenido agregado a través de js a cualquier control, incluida la lista desplegable, no se guardará.
//Convierte parámetros a int
int i = Convert.ToInt32(cadena);
//Definimos una cadena para guardar los datos devueltos por la base de datos
resultado de cadena = "";
//borrar la salida primero
Respuesta.Clear();
cadena connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
Conexión SqlConnection = nueva SqlConnection(connStr);
comunicación SqlCommand = conexión.CreateCommand();
string commStr = string.Format("seleccione type_value,type_text de phone_type donde parent_id = {0}",i);
comm.CommandText = commStr;
conexión.Open();
SqlDataReader dr = comm.ExecuteReader();
mientras (dr.Read())
{
resultado += ","+dr[0].ToString() +"|" + dr[1].ToString();
//dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
}
//Enviar la información obtenida de la base de datos al cliente
Respuesta.Escribir(resultado);
//Cerrar respuesta después de completar la salida para evitar salidas innecesarias
Respuesta.Flush();
Respuesta.Cerrar();
dr.Cerrar();
conexión.Cerrar();
}
#region Código generado por el diseñador de formularios web
anular el vacío protegido OnInit (EventArgs e)
{
//
// CODEGEN: esta llamada la requiere el diseñador de formularios web ASP.NET.
//
InicializarComponente();
base.OnInit(e);
}
/// <resumen>
/// Designer admite los métodos requeridos; no use el editor de código para modificar
/// El contenido de este método.
/// </summary>
vacío privado InicializarComponente()
{
this.Button1.Click += nuevo System.EventHandler(this.Button1_Click);
this.Load += nuevo System.EventHandler(this.Page_Load)
;
#endregion
private void Button1_Click (remitente del objeto, System.EventArgs e)
{
Response.Write(Request.Form["dListChild"].ToString());
}
}
}
Ficha de datos:
ID de clave principal parent_id(int) type_value(int) type_text(varchar)
int incrementa el valor del cuadro desplegable principal el valor del cuadro desplegable el texto del cuadro desplegable