Peut-être que "excellent" apportera beaucoup de critiques, mais je pense que c'est vraiment bien. J'ai regardé environ 20 listes déroulantes liées sans les actualiser, et elles étaient en désordre sous Firefox, j'en ai presque fait deux. Oh mon dieu. , comment conserver la valeur de la deuxième list box après avoir soumis le formulaire, car si vous ajoutez des entrées à la liste déroulante via js, son état ne sera pas enregistré Plateforme de test : ie6, firefox.
Fonction : liaison sans actualisation de deuxième niveau Caractéristiques : multi-navigateur ; soumettez le formulaire pour obtenir la valeur de la deuxième liste déroulante ; les données proviennent de la base de données ; utilisez xmlhttp pour envoyer des demandes afin d'obtenir des demandes de non-actualisation : si vous le pouvez. trouvez une meilleure méthode, s'il vous plaît dites-moi, merci beaucoup, vos critiques et suggestions sont pour moi un grand encouragement
webform1.aspx :
<%@ Page Language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="drop.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<TÊTE>
<titre>WebForm1</titre>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<méta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content=" http://schemas.microsoft.com/intellisense/ie5 ">
<langage de script="javascript">
//La fonction jb initialisera un objet xmlhttp selon les différents navigateurs
fonction jb()
{
var A = nul ;
essayer
{
A=nouveau ActiveXObject("Msxml2.XMLHTTP");
}
attraper(e)
{
essayer
{
A=nouveau ActiveXObject("Microsoft.XMLHTTP");
}
attraper (oc)
{
A = nul
}
}
if ( !A && typeof XMLHttpRequest != "undefined" )
{
A=nouveau XMLHttpRequest()
}
retour A
}
//La fonction Go suivante est appelée lorsque la zone de liste parent change et que le paramètre est l'élément sélectionné.
fonction Go(obj)
{
//Récupère la valeur de la liste déroulante de la zone de sélection
var svalue = obj.value;
//Définir la page pour traiter les données
var weburl = "webform1.aspx?parent_id="+svalue;
//Initialiser un objet XMLhttp
var xmlhttp = jb();
//Soumettre les données, le premier paramètre est de préférence get et le troisième paramètre est de préférence vrai
xmlhttp.open("get",weburl,true);
// alerte(xmlhttp.responseText);
//Si les données ont été renvoyées avec succès
xmlhttp.onreadystatechange=fonction()
{
if(xmlhttp.readyState==4)//4 représente un retour réussi des données
{
var result = xmlhttp.responseText;//Récupérer les données renvoyées par le serveur
//Effacez d'abord tous les éléments déroulants de dListChild
document.getElementById("dListChild").length = 0;
//Ajoute tous les modèles à dListChild. Notez que Option n'est pas une option.
document.getElementById("dListChild").options.add(new Option("Tous les modèles","0"));
if(result!="")//Si les données renvoyées ne sont pas vides
{
// Divise la chaîne reçue en tableaux selon
var allArray = result.split(",");
// Bouclez ce tableau, notez qu'il commence à 1, car le premier caractère de la chaîne reçue est ,, donc le premier tableau après le fractionnement est vide
pour(var i=1;i<allArray.length;i++)
{
// Divisez cette chaîne en tableaux selon |
var thisArray = allArray[i].split("|");
//Ajouter des entrées à dListChild
document.getElementById("dListChild").options.add(new Option(thisArray[1].toString(),thisArray[0].toString()));
}
}
}
}
//Envoyez des données, veuillez faire attention à l'ordre et aux paramètres. Les paramètres doivent être nuls ou "".
xmlhttp.send(null);
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DropDownList onchange="Go(this)" id="dListParent" style="Z-INDEX : 101 ; GAUCHE : 248 px ; POSITION : absolue ; HAUT : 40 px"
runat="serveur">
<asp:ListItem Value="100">Motorola</asp:ListItem>
<asp:ListItem Value="101">Nokia</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList id="dListChild" style="Z-INDEX : 102 ; GAUCHE : 248 px ; POSITION : absolue ; HAUT : 104 px"
runat="serveur"></asp:DropDownList>
<asp:Button id="Button1" style="Z-INDEX : 103 ; GAUCHE : 256 px ; POSITION : absolue ; HAUT : 176 px" runat="server"
Text="Bouton"></asp:Bouton>
</form>
</corps>
</HTML>
Back-end webform1.aspx.cs :
utiliser le système ;
en utilisant System.Collections ;
en utilisant System.ComponentModel ;
en utilisant System.Data ;
en utilisant System.Drawing ;
en utilisant System.Web ;
en utilisant System.Web.SessionState ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.HtmlControls ;
en utilisant System.Configuration ;
la suppression de l'espace de noms
System.Data.SqlClient ;
{
/// <résumé>
/// Description récapitulative de WebForm1.
/// </summary>
classe publique WebForm1 : System.Web.UI.Page
{
protégé System.Web.UI.WebControls.DropDownList dListParent ;
protégé System.Web.UI.WebControls.Button Button1 ;
protégé System.Web.UI.WebControls.DropDownList dListChild ;
private void Page_Load (expéditeur de l'objet, System.EventArgs e)
{
//Mettez le code utilisateur ici pour initialiser la page
//si(!IsPostBack)
//{
BindDrop();//S'il n'est pas renvoyé, liez la zone de liste
//}
}
protégé void BindDrop()
{
//Tout d'abord, je souhaite que la liste déroulante parent soit également liée à la base de données, mais je ne pense pas que ce soit nécessaire plus tard.
//si(!IsPostBack)
//{
// Lier le parent dListParent
//BindParent();
//}
//Obtenir la valeur parent_id transmise, si c'est la première requête, elle sera nulle
string str = Request.QueryString["parent_id"];
string str1 = dListParent.SelectedValue;;
Réponse.Write(str1);
//Si str ajoute une chaîne !=la chaîne d'origine, cela signifie que l'événement onchange de dListParent a été déclenché
si((str+"abc")!="abc")
{
// Lier le contrôle dListChild
BindChild(str);//Utiliser la valeur transmise du parent DropDownList comme paramètre
}
autre
LierParent(str1);
}
protégé void BindParent (string str)
{
// S'il s'agit de la première requête ou si la page est actualisée, elle sera sélectionnée en fonction de la valeur de dListParent.
//Convertir les paramètres en entier
int i = Convert.ToInt32(str);
dListChild.Items.Clear();
dListChild.Items.Add(new ListItem("Tous les modèles","0"));
//Récupère la chaîne de connexion à la base de données
chaîne connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
//Initialiser un objet conn
SqlConnection conn = new SqlConnection(connStr);
//instruction de base de données
string commStr = string.Format("select type_value,type_text from phone_type où parent_id={0}",i);
//Créer un objet de commande de base de données
SqlCommand comm = new SqlCommand(commStr,conn);
//Ouvre la base de données
conn.Open();
//Exécuter la commande
SqlDataReader dr = comm.ExecuteReader();
// Bouclez dr et ajoutez des entrées à dListParent
pendant que(dr.Read())
{
dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
//Ça peut aussi être comme ça
//dListParent.Items.Add(new ListItem(dr["phone_text"].ToString(),dr["phone_value"].ToString()));
}
dListParent.Items[0].Selected = true;
// L'ajout de ce qui suit signifie que l'état du deuxième dListChild peut être enregistré lorsque vous cliquez sur le bouton de soumission pour soumettre le formulaire.
dListChild.SelectedValue = Request.Form["dListChild"];
dr.Close();
conn.Close();
}
protégé void BindChild (string str)
{
//Le contenu ajouté via js à n'importe quel contrôle, y compris la liste déroulante, ne sera pas enregistré.
//Convertir les paramètres en entier
int i = Convert.ToInt32(str);
//Définit une chaîne pour enregistrer les données renvoyées par la base de données
résultat de la chaîne = "" ;
//Efface d'abord la sortie
Réponse.Clear();
chaîne connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
SqlConnection conn = new SqlConnection(connStr);
SqlCommand comm = conn.CreateCommand();
string commStr = string.Format("select type_value,type_text from phone_type où parent_id = {0}",i);
comm.CommandText = commStr;
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
pendant que(dr.Read())
{
résultat += ","+dr[0].ToString() +"|" + dr[1].ToString();
//dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
}
// Envoyer les informations obtenues de la base de données au client
Réponse.Write(résultat);
// Fermer la réponse une fois la sortie terminée pour éviter une sortie inutile
Réponse.Flush();
Réponse.Close();
dr.Close();
conn.Close();
}
Code généré par le concepteur de formulaires Web #region
remplacer le void protégé OnInit (EventArgs e)
{
//
// CODEGEN : cet appel est requis par le concepteur ASP.NET Web Forms.
//
InitializeComponent();
base.OnInit(e);
}
/// <résumé>
/// Designer prend en charge les méthodes requises - n'utilisez pas l'éditeur de code pour modifier
/// Le contenu de cette méthode.
/// </summary>
vide privé InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load }
)
#endregion
private void Button1_Click (expéditeur de l'objet, System.EventArgs e)
{
Response.Write(Request.Form["dListChild"].ToString());
}
}
}
Fiche de données:
ID de clé primaire parent_id(int) type_value(int) type_text(varchar)
int incrémente la valeur de la liste déroulante parent la valeur de la liste déroulante le texte de la liste déroulante