Mungkin "luar biasa" akan mendatangkan banyak kritik, tapi menurut saya ini sangat bagus. Saya melihat sekitar 20 daftar drop-down yang tertaut tanpa menyegarkannya, dan semuanya berantakan di Firefox. Saya hampir membuat dua untuk ini , bagaimana cara menjaga nilai kotak daftar kedua setelah mengirimkan formulir, karena jika Anda menambahkan entri ke kotak drop-down melalui js, statusnya tidak akan disimpan. Platform pengujian: ie6, firefox
Fungsi: Tautan non-refresh tingkat kedua Fitur: Lintas-browser; kirimkan formulir untuk mendapatkan nilai kotak drop-down kedua; data berasal dari database gunakan xmlhttp untuk mengirim permintaan untuk mencapai permintaan non-refresh: Jika Anda bisa temukan metode yang lebih baik, tolong Sampaikan kepada saya, terima kasih banyak, kritik dan saran anda merupakan penyemangat yang besar bagi saya
formulir web1.aspx:
<%@ Halaman bahasa="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="drop.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transisi//EN" >
<HTML>
<KEPALA>
<title>Formulir Web1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Konten="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content=" http://schemas.microsoft.com/intellisense/ie5 ">
<skrip bahasa="javascript">
//Fungsi jb akan menginisialisasi objek xmlhttp sesuai dengan browser yang berbeda
fungsi jb()
{
var A=nol;
mencoba
{
A=new ActiveXObject("Msxml2.XMLHTTP");
}
menangkap(e)
{
mencoba
{
A=new ActiveXObject("Microsoft.XMLHTTP");
}
menangkap (ok)
{
A=nol
}
}
jika ( !A && typeof XMLHttpRequest != "tidak terdefinisi" )
{
A=XMLHttpRequest() baru
}
kembali A
}
//Fungsi Go berikut ini dipanggil ketika kotak daftar induk berubah, dan parameternya adalah item yang dipilih.
fungsi Pergi(obj)
{
//Dapatkan nilai dari daftar drop-down kotak pilihan
var svalue = obj.nilai;
//Tentukan halaman untuk memproses data
var weburl = "webform1.aspx?parent_id="+svalue;
//Inisialisasi objek xmlhttp
var xmlhttp = jb();
//Kirim data, parameter pertama sebaiknya dapatkan, dan parameter ketiga sebaiknya benar
xmlhttp.open("dapatkan",weburl,benar);
// peringatan(xmlhttp.responseText);
//Jika data telah berhasil dikembalikan
xmlhttp.onreadystatechange=fungsi()
{
if(xmlhttp.readyState==4)//4 menunjukkan pengembalian data yang berhasil
{
var result = xmlhttp.responseText;//Dapatkan data yang dikembalikan oleh server
//Pertama-tama hapus semua item drop-down dListChild
document.getElementById("dListChild").panjang = 0;
//Tambahkan semua model ke dListChild. Perhatikan bahwa Option bukanlah pilihan.
document.getElementById("dListChild").options.add(Opsi baru("Semua model","0"));
if(result!="")//Jika data yang dikembalikan tidak kosong
{
//Pisahkan string yang diterima menjadi array sesuai dengan
var allArray = hasil.split(",");
//Ulangi array ini, perhatikan bahwa array ini dimulai dari 1, karena karakter pertama dari string yang diterima adalah ,, jadi array pertama setelah pemisahan kosong
for(var i=1;i<allArray.panjang;i++)
{
//Pisahkan string ini menjadi array menurut |
var thisArray = semuaArray[i].split("|");
//Tambahkan entri ke dListChild
document.getElementById("dListChild").options.add(Opsi baru(thisArray[1].toString(),thisArray[0].toString()));
}
}
}
}
//Kirim data, harap perhatikan urutan dan parameternya harus null atau ""
xmlhttp.kirim(null);
}
</skrip>
</KEPALA>
<badan MS_POSITIONING="GridLayout">
<form id="Form1" metode="posting" runat="server">
<asp:DropDownList onchange="Go(this)" id="dListParent" style="Z-INDEX: 101; KIRI: 248 piksel; POSISI: absolut; ATAS: 40 piksel"
runat="server">
<asp:ListItem Value="100">Motorola</asp:ListItem>
<asp:ListItem Value="101">Nokia</asp:ListItem>
</asp:Daftar DropDown>
<asp:DropDownList id="dListChild" style="Z-INDEX: 102; KIRI: 248px; POSISI: absolut; ATAS: 104px"
runat="server"></asp:DropDownList>
<asp:Button id="Button1" style="Z-INDEX: 103; KIRI: 256px; POSISI: absolut; ATAS: 176px" runat="server"
Text="Tombol"></asp:Tombol>
</bentuk>
</tubuh>
</HTML>
webform1.aspx.cs bagian belakang:
menggunakan Sistem;
menggunakan Sistem.Koleksi;
menggunakan Sistem.ComponentModel;
menggunakan Sistem.Data;
menggunakan Sistem.Gambar;
menggunakan Sistem.Web;
menggunakan Sistem.Web.SessionState;
menggunakan Sistem.Web.UI;
menggunakan Sistem.Web.UI.WebControls;
menggunakan Sistem.Web.UI.HtmlControls;
menggunakan Sistem.Konfigurasi;
penurunan namespace
System.Data.SqlClient;
{
/// <ringkasan>
/// Deskripsi ringkasan WebForm1.
/// </ringkasan>
WebForm1 kelas publik : Sistem.Web.UI.Halaman
{
dilindungi Sistem.Web.UI.WebControls.DropDownList dListParent;
dilindungi System.Web.UI.WebControls.Button Button1;
dilindungi Sistem.Web.UI.WebControls.DropDownList dListChild;
private void Page_Load(pengirim objek, System.EventArgs e)
{
//Masukkan kode pengguna di sini untuk menginisialisasi halaman
//jika(!IsPostBack)
//{
BindDrop();//Jika tidak dikirimkan kembali, ikat kotak daftar
//}
}
dilindungi kekosongan BindDrop()
{
//Pertama-tama, saya ingin dropdownlist induk juga terikat ke database, tapi menurut saya itu tidak perlu nanti.
//jika(!IsPostBack)
//{
//Ikat induk dListParent
//BindParent();
//}
//Dapatkan nilai parent_id yang diteruskan, jika ini adalah permintaan pertama, maka akan menjadi null
string str = Permintaan.QueryString["parent_id"];
string str1 = dListParent.SelectedValue;;
Respon.Tulis(str1);
//Jika str menambahkan string!=string asli, itu berarti event onchange dListParent telah dipicu
jika((str+"abc")!="abc")
{
//Ikat kontrol dListChild
BindChild(str);//Gunakan nilai yang diteruskan dari DropDownList induk sebagai parameter
}
kalau tidak
BindParent(str1);
}
kekosongan yang dilindungi BindParent(string str)
{
//Jika ini adalah permintaan pertama atau halaman di-refresh, maka akan dipilih berdasarkan nilai dListParent.
//Ubah parameter menjadi int
int i = Konversi.ToInt32(str);
dListChild.Items.Clear();
dListChild.Items.Add(New ListItem("Semua model","0"));
//Dapatkan string koneksi database
string connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
//Inisialisasi objek koneksi
Sambungan SqlConnection = SqlConnection baru(sambunganStr);
//pernyataan basis data
string commStr = string.Format("pilih type_value,type_text dari phone_type di mana parent_id={0}",i);
//Membuat objek perintah database
Komunikasi SqlCommand = new SqlCommand(commStr,sambungan);
//Buka basis data
samb.Buka();
//Jalankan perintah
SqlDataReader dr = comm.ExecuteReader();
//Ulangi dr dan tambahkan entri ke dListParent
while(dr.Baca())
{
dListChild.Items.Add(ListItem baru(dr[1].ToString(),dr[0].ToString()));
//Bisa juga seperti ini
//dListParent.Items.Add(ListItem baru(dr["phone_text"].ToString(),dr["phone_value"].ToString()));
}
dListParent.Items[0].Dipilih = benar;
//Menambahkan yang berikut berarti status dListChild kedua dapat disimpan ketika tombol kirim diklik untuk mengirimkan formulir.
dListChild.SelectedValue = Permintaan.Form["dListChild"];
dr.Tutup();
samb.Tutup();
}
kekosongan terlindung BindChild(string str)
{
//Konten yang ditambahkan melalui js ke kontrol apa pun termasuk daftar dropdown tidak akan disimpan.
//Ubah parameter menjadi int
int i = Konversi.ToInt32(str);
//Tentukan string untuk menyimpan data yang dikembalikan dari database
hasil string = "";
//Hapus keluarannya terlebih dahulu
Respon.Hapus();
string connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
Sambungan SqlConnection = SqlConnection baru(sambunganStr);
Komunikasi SqlCommand = samb.CreateCommand();
string commStr = string.Format("pilih type_value,type_text dari phone_type di mana parent_id = {0}",i);
comm.CommandText = commStr;
samb.Buka();
SqlDataReader dr = comm.ExecuteReader();
while(dr.Baca())
{
hasil += ","+dr[0].ToString() +"|" + dr[1].ToString();
//dListChild.Items.Add(ListItem baru(dr[1].ToString(),dr[0].ToString()));
}
//Output informasi yang diperoleh dari database ke klien
Response.Write(hasil);
//Tutup Respon setelah keluaran selesai untuk menghindari keluaran yang tidak perlu
Respon.Flush();
Respon.Tutup();
dr.Tutup();
samb.Tutup();
}
#region Kode yang Dihasilkan Perancang Formulir Web
ganti void OnInit yang dilindungi (EventArgs e)
{
//
// CODEGEN: Panggilan ini diperlukan oleh perancang Formulir Web ASP.NET.
//
Inisialisasi Komponen();
base.OnInit(e);
}
/// <ringkasan>
/// Desainer mendukung metode yang diperlukan - jangan gunakan editor kode untuk memodifikasi
/// Isi dari metode ini.
/// </ringkasan>
kekosongan pribadi InitializeComponent()
{
this.Button1.Click += Sistem baru.EventHandler(this.Button1_Click);
ini.Muat += Sistem baru.EventHandler(ini.Page_Load)
;
#endregion
private void Button1_Click(pengirim objek, System.EventArgs e)
{
Respon.Write(Permintaan.Form["dListChild"].ToString());
}
}
}
Lembar data:
Id kunci utama parent_id(int) type_value(int) type_text(varchar)
int menambah nilai kotak drop-down induk nilai kotak drop-down teks dari kotak drop-down