Vielleicht wird „ausgezeichnet“ viel Kritik hervorrufen, aber ich finde es wirklich gut. Ich habe mir ungefähr 20 verlinkte Dropdown-Listen angeschaut, und unter Firefox waren es fast zwei , wie man den Wert des zweiten Listenfelds nach dem Absenden des Formulars beibehält, denn wenn Sie über js Einträge zum Dropdown-Feld hinzufügen, wird dessen Status nicht gespeichert. Testplattform: ie6, Firefox
Funktion: Nicht-Aktualisierungsverknüpfung der zweiten Ebene: Übertragen Sie das Formular, um den Wert des zweiten Dropdown-Felds abzurufen. Verwenden Sie xmlhttp, um Anforderungen zu senden, um Nicht-Aktualisierungsanforderungen zu erfüllen Finden Sie eine bessere Methode, bitte sagen Sie es mir, vielen Dank, Ihre Kritik und Vorschläge sind mir eine große Ermutigung
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>
<KOPF>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content=" http://schemas.microsoft.com/intellisense/ie5 ">
<script language="javascript">
//Die jb-Funktion initialisiert ein xmlhttp-Objekt je nach Browser
Funktion jb()
{
var A=null;
versuchen
{
A=new ActiveXObject("Msxml2.XMLHTTP");
}
fangen(e)
{
versuchen
{
A=new ActiveXObject("Microsoft.XMLHTTP");
}
fangen(oc)
{
A=null
}
}
if ( !A && typeof XMLHttpRequest != "undefiniert" )
{
A=neue XMLHttpRequest()
}
A zurückgeben
}
//Die folgende Go-Funktion wird aufgerufen, wenn sich das übergeordnete Listenfeld ändert und der Parameter das ausgewählte Element ist.
Funktion Go(obj)
{
//Den Wert der Dropdown-Liste des Auswahlfelds abrufen
var svalue = obj.value;
//Definieren Sie die Seite zum Verarbeiten von Daten
var weburl = "webform1.aspx?parent_id="+svalue;
//Initialisieren Sie ein xmlhttp-Objekt
var xmlhttp = jb();
// Daten senden, der erste Parameter ist vorzugsweise get und der dritte Parameter ist vorzugsweise true
xmlhttp.open("get",weburl,true);
// alarm(xmlhttp.responseText);
//Wenn die Daten erfolgreich zurückgegeben wurden
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)//4 steht für die erfolgreiche Rückgabe von Daten
{
var result = xmlhttp.responseText;//Holen Sie sich die vom Server zurückgegebenen Daten
//Löschen Sie zuerst alle Dropdown-Elemente von dListChild
document.getElementById("dListChild").length = 0;
//Alle Modelle zu dListChild hinzufügen. Beachten Sie, dass Option keine Option ist.
document.getElementById("dListChild").options.add(new Option("All models","0"));
if(result!="")//Wenn die zurückgegebenen Daten nicht leer sind
{
//Teilen Sie die empfangene Zeichenfolge entsprechend in Arrays auf
var allArray = result.split(",");
//Schleifen Sie dieses Array in einer Schleife. Beachten Sie, dass es bei 1 beginnt, da das erste Zeichen der empfangenen Zeichenfolge , ist und das erste Array nach der Aufteilung leer ist
for(var i=1;i<allArray.length;i++)
{
//Diesen String gemäß | in Arrays aufteilen
var thisArray = allArray[i].split("|");
//Einträge zu dListChild hinzufügen
document.getElementById("dListChild").options.add(new Option(thisArray[1].toString(),thisArray[0].toString()));
}
}
}
}
//Daten senden, bitte auf Reihenfolge und Parameter achten. Die Parameter müssen null oder „“ sein.
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; LEFT: 248px; POSITION: absolut; TOP: 40px"
runat="server">
<asp:ListItem Value="100">Motorola</asp:ListItem>
<asp:ListItem Value="101">Nokia</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList id="dListChild" style="Z-INDEX: 102; LINKS: 248px; POSITION: absolut; OBEN: 104px"
runat="server"></asp:DropDownList>
<asp:Button id="Button1" style="Z-INDEX: 103; LEFT: 256px; POSITION: absolut; TOP: 176px" runat="server"
Text="Button"></asp:Button>
</form>
</body>
</HTML>
Backend webform1.aspx.cs:
Verwenden des Systems;
Verwenden von System.Collections;
mit System.ComponentModel;
Verwenden von System.Data;
Verwenden von System.Drawing;
mit System.Web;
using System.Web.SessionState;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.HtmlControls;
Verwenden von System.Configuration;
Verwenden von System.Data.SqlClient;
Namespace-Drop
{
/// <Zusammenfassung>
/// Zusammenfassende Beschreibung von WebForm1.
/// </summary>
öffentliche Klasse WebForm1: System.Web.UI.Page
{
protected System.Web.UI.WebControls.DropDownList dListParent;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DropDownList dListChild;
private void Page_Load(object sender, System.EventArgs e)
{
//Geben Sie hier den Benutzercode ein, um die Seite zu initialisieren
//if(!IsPostBack)
//{
BindDrop();//Wenn es nicht zurückgesendet wird, binden Sie das Listenfeld
//}
}
protected void BindDrop()
{
//Zuerst möchte ich, dass die übergeordnete Dropdown-Liste auch an die Datenbank gebunden wird, aber ich glaube nicht, dass dies später notwendig ist.
//if(!IsPostBack)
//{
//Übergeordnetes dListParent binden
//BindParent();
//}
//Den übergebenen parent_id-Wert abrufen. Wenn es sich um die erste Anfrage handelt, ist er null
string str = Request.QueryString["parent_id"];
string str1 = dListParent.SelectedValue;;
Response.Write(str1);
//Wenn str eine Zeichenfolge hinzufügt!=die ursprüngliche Zeichenfolge, bedeutet dies, dass das onchange-Ereignis von dListParent ausgelöst wurde
if((str+"abc")!="abc")
{
//Binde das dListChild-Steuerelement
BindChild(str);//Verwenden Sie den übergebenen Wert der übergeordneten DropDownList als Parameter
}
anders
BindParent(str1);
}
protected void BindParent(string str)
{
//Wenn es sich um die erste Anfrage handelt oder die Seite aktualisiert wird, wird sie basierend auf dem Wert von dListParent ausgewählt.
//Parameter in int konvertieren
int i = Convert.ToInt32(str);
dListChild.Items.Clear();
dListChild.Items.Add(new ListItem("Alle Modelle","0"));
//Holen Sie sich die Datenbankverbindungszeichenfolge
string connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
//Initialisiere ein Conn-Objekt
SqlConnection conn = new SqlConnection(connStr);
//Datenbankanweisung
string commStr = string.Format("select type_value,type_text from phone_type where parent_id={0}",i);
//Datenbankbefehlsobjekt erstellen
SqlCommand comm = new SqlCommand(commStr,conn);
//Öffne die Datenbank
conn.Open();
//Befehl ausführen
SqlDataReader dr = comm.ExecuteReader();
//Schleife dr und füge Einträge zu dListParent hinzu
while(dr.Read())
{
dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
//Es kann auch so sein
//dListParent.Items.Add(new ListItem(dr["phone_text"].ToString(),dr["phone_value"].ToString()));
}
dListParent.Items[0].Selected = true;
//Das Hinzufügen von Folgendem bedeutet, dass der Status des zweiten dListChild gespeichert werden kann, wenn auf die Schaltfläche „Senden“ geklickt wird, um das Formular zu senden.
dListChild.SelectedValue = Request.Form["dListChild"];
dr.Close();
conn.Close();
}
protected void BindChild(string str)
{
//Inhalte, die über js zu einem Steuerelement einschließlich Dropdown-Liste hinzugefügt werden, werden nicht gespeichert.
//Parameter in int konvertieren
int i = Convert.ToInt32(str);
//Definieren Sie eine Zeichenfolge zum Speichern der von der Datenbank zurückgegebenen Daten
string result = "";
//Zuerst die Ausgabe löschen
Response.Clear();
string 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 where parent_id = {0}",i);
comm.CommandText = commStr;
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
while(dr.Read())
{
Ergebnis += ","+dr[0].ToString() +"| + dr[1].ToString();
//dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
}
//Geben Sie die aus der Datenbank erhaltenen Informationen an den Client aus
Response.Write(result);
//Close-Antwort nach Abschluss der Ausgabe, um unnötige Ausgaben zu vermeiden
Response.Flush();
Response.Close();
dr.Close();
conn.Close();
}
#region Vom Web Forms Designer generierter Code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: Dieser Aufruf wird vom ASP.NET Web Forms-Designer benötigt.
//
InitializeComponent();
base.OnInit(e);
}
/// <Zusammenfassung>
/// Designer unterstützt erforderliche Methoden – verwenden Sie zum Ändern keinen Code-Editor
/// Der Inhalt dieser Methode.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
Response.Write(Request.Form["dListChild"].ToString());
}
}
}
Datenblatt:
Primärschlüssel-ID parent_id(int) type_value(int) type_text(varchar)
int erhöht den Wert des übergeordneten Dropdown-Felds, den Wert des Dropdown-Felds, den Text des Dropdown-Felds