ربما تجلب كلمة "ممتاز" الكثير من الانتقادات، لكنني أعتقد أنها جيدة حقًا، لقد نظرت إلى حوالي 20 قائمة منسدلة مرتبطة دون تحديث، وكانت عبارة عن فوضى في متصفح Firefox كيفية الاحتفاظ بقيمة مربع القائمة الثاني بعد إرسال النموذج، لأنه إذا قمت بإضافة إدخالات إلى المربع المنسدل من خلال JS، فلن يتم حفظ حالته منصة الاختبار: ie6، Firefox
الوظيفة: ميزات الارتباط غير المحدث من المستوى الثاني: إرسال النموذج عبر المتصفح للحصول على قيمة المربع المنسدل الثاني من قاعدة البيانات؛ استخدم xmlhttp لإرسال الطلبات لتحقيق الطلبات غير المحدثة: إذا أمكن العثور على طريقة أفضل، من فضلك قل لي، شكرا جزيلا، انتقاداتكم واقتراحاتكم هي تشجيع كبير لي
webform1.aspx:
<%@ لغة الصفحة = "c#" Codebehind = "WebForm1.aspx.cs" AutoEventWireup = "false" Inherits = "drop.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<أتش تي أم أل>
<الرأس>
<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 ">
<لغة البرمجة = "جافا سكريبت">
// ستقوم وظيفة jb بتهيئة كائن xmlhttp وفقًا للمتصفحات المختلفة
وظيفة جي بي ()
{
فار أ=null;
يحاول
{
A=new ActiveXObject("Msxml2.XMLHTTP");
}
قبض (ه)
{
يحاول
{
A=new ActiveXObject("Microsoft.XMLHTTP");
}
قبض (أوك)
{
أ = فارغة
}
}
إذا ( !A && نوع XMLHttpRequest != "غير محدد")
{
A=XMLHttpRequest() جديد
}
عودة أ
}
// يتم استدعاء وظيفة Go التالية عندما يتغير مربع القائمة الأصل، وتكون المعلمة هي العنصر المحدد.
وظيفة الذهاب (الكائن)
{
// احصل على قيمة القائمة المنسدلة لمربع التحديد
فار svalue = obj.value;
// تحديد الصفحة لمعالجة البيانات
فار weburl = "webform1.aspx?parent_id="+svalue;
// تهيئة كائن xmlhttp
var xmlhttp = jb();
// إرسال البيانات، ويفضل الحصول على المعلمة الأولى، ويفضل أن تكون المعلمة الثالثة صحيحة
xmlhttp.open("get",weburl,true);
// تنبيه (xmlhttp.responseText)؛
// إذا تم إرجاع البيانات بنجاح
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4)//4 يمثل إعادة البيانات بنجاح
{
var result = xmlhttp.responseText;//احصل على البيانات التي أعادها الخادم
// قم أولاً بمسح جميع العناصر المنسدلة لـ dListChild
document.getElementById("dListChild").length = 0;
// أضف كافة النماذج إلى dListChild. لاحظ أن الخيار ليس خيارًا.
document.getElementById("dListChild").options.add(new Option("جميع النماذج"،"0"));
if(result!="")//إذا كانت البيانات التي تم إرجاعها ليست فارغة
{
// قم بتقسيم السلسلة المستلمة إلى صفائف وفقًا لـ
var allArray = result.split("،);
// قم بتكرار هذه المصفوفة، لاحظ أنها تبدأ من 1، لأن الحرف الأول من السلسلة المستلمة هو، لذا فإن المصفوفة الأولى بعد التقسيم تكون فارغة
for(var i=1;i<allArray.length;i++)
{
// قسّم هذه السلسلة إلى صفائف وفقًا لـ |
var thisArray = allArray[i].split("|");
// أضف إدخالات إلى dListChild
document.getElementById("dListChild").options.add(new Option(thisArray[1].toString(),thisArray[0].toString()));
}
}
}
}
//أرسل البيانات، يرجى الانتباه إلى الترتيب والمعلمات يجب أن تكون المعلمات فارغة أو ""
xmlhttp.send(null);
}
</script>
</الرأس>
<body MS_POSITIONING="GridLayout">
<form id="Form1"method="post" runat="server">
<asp:DropDownList onchange = "Go (this)" id = "dListParent" style = "Z-INDEX: 101؛ اليسار: 248 بكسل؛ الموضع: مطلق؛ الأعلى: 40 بكسل"
تشغيل = "الخادم">
<asp:ListItem Value="100">موتورولا</asp:ListItem>
<asp:ListItem Value="101">نوكيا</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList id = "dListChild" style = "Z-INDEX: 102؛ اليسار: 248 بكسل؛ الموضع: مطلق؛ الأعلى: 104 بكسل"
runat="server"></asp:DropDownList>
<asp:Button id = "Button1" style = "Z-INDEX: 103؛ اليسار: 256 بكسل؛ الموضع: مطلق؛ الأعلى: 176 بكسل" runat = "الخادم"
نص = "زر"></asp:زر>
</النموذج>
</الجسم>
</HTML>
الواجهة الخلفية webform1.aspx.cs:
باستخدام النظام؛
باستخدام System.Collections؛
باستخدام System.ComponentModel؛
باستخدام System.Data؛
باستخدام System.Drawing؛
باستخدام System.Web؛
باستخدام System.Web.SessionState؛
باستخدام System.Web.UI؛
باستخدام System.Web.UI.WebControls؛
باستخدام System.Web.UI.HtmlControls؛
باستخدام System.Configuration؛
باستخدام System.Data.SqlClient
إسقاط مساحة الاسم
{
/// <الملخص>
/// وصف موجز لـ WebForm1.
/// </الملخص>
الفئة العامة WebForm1: System.Web.UI.Page
{
محمية System.Web.UI.WebControls.DropDownList dListParent;
System.Web.UI.WebControls.Button Button1 المحمي؛
محمي System.Web.UI.WebControls.DropDownList dListChild;
Page_Load باطلة خاصة (مرسل الكائن، System.EventArgs e)
{
// ضع رمز المستخدم هنا لتهيئة الصفحة
//إذا(!IsPostBack)
//{
BindDrop();// إذا لم يتم إرساله مرة أخرى، قم بربط مربع القائمة
//
}
BindDrop () باطلة محمية
{
// أولاً وقبل كل شيء، أريد أيضًا أن تكون القائمة المنسدلة الأصلية مرتبطة بقاعدة البيانات، لكنني لا أعتقد أن ذلك ضروريًا لاحقًا.
//إذا(!IsPostBack)
//{
// ربط الأصل dListParent
//BindParent();
//
// احصل على قيمةparent_id التي تم تمريرها، إذا كان هذا هو الطلب الأول، فسيكون فارغًا
string str = Request.QueryString["parent_id"];
سلسلة str1 = dListParent.SelectedValue؛؛
Response.Write(str1);
// إذا أضافت str سلسلة! = السلسلة الأصلية، فهذا يعني أنه تم تشغيل حدث onchange الخاص بـ dListParent
إذا((str+"abc")!=abc")
{
// ربط التحكم dListChild
BindChild(str);// استخدم القيمة التي تم تمريرها لقائمة DropDownList الأصلية كمعلمة
}
آخر
BindParent(str1);
}
BindParent المحمي (سلسلة سلسلة)
{
// إذا كان هذا هو الطلب الأول أو تم تحديث الصفحة، فسيتم تحديده بناءً على قيمة dListParent.
// تحويل المعلمات إلى int
int i = Convert.ToInt32(str);
dListChild.Items.Clear();
dListChild.Items.Add(new ListItem("جميع النماذج"،"0"));
// احصل على سلسلة اتصال قاعدة البيانات
string connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
// تهيئة كائن conn
SqlConnection conn = new SqlConnection(connStr);
// بيان قاعدة البيانات
string commStr = string.Format("select type_value,type_text from phone_type Whereparent_id={0}"،i);
// إنشاء كائن أمر قاعدة البيانات
SqlCommand comm = new SqlCommand(commStr,conn);
// افتح قاعدة البيانات
conn.Open();
// تنفيذ الأمر
SqlDataReader dr = comm.ExecuteReader();
// قم بتكرار dr وأضف إدخالات إلى dListParent
بينما (دكتور قراءة ())
{
dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
// يمكن أن يكون أيضًا هكذا
//dListParent.Items.Add(new ListItem(dr["phone_text"].ToString(),dr["phone_value"].ToString()));
}
dListParent.Items[0].Selected = true;
// إضافة ما يلي يعني أنه يمكن حفظ حالة dListChild الثانية عند النقر فوق زر الإرسال لإرسال النموذج.
dListChild.SelectedValue = Request.Form["dListChild"];
dr.Close();
conn.Close();
}
الفراغ المحمي BindChild (سلسلة سلسلة)
{
// لن يتم حفظ المحتوى المضاف عبر js إلى أي عنصر تحكم بما في ذلك القائمة المنسدلة.
// تحويل المعلمات إلى int
int i = Convert.ToInt32(str);
// تحديد سلسلة لحفظ البيانات التي تم إرجاعها من قاعدة البيانات
نتيجة السلسلة = ""؛
// امسح الإخراج أولاً
استجابة. واضح ()؛
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 Whereparent_id = {0}"،i);
comm.CommandText = commStr;
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
بينما (دكتور قراءة ())
{
result += ""،+dr[0].ToString() +"|" + dr[1].ToString();
//dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
}
// إخراج المعلومات التي تم الحصول عليها من قاعدة البيانات إلى العميل
الاستجابة. الكتابة (النتيجة)؛
// أغلق الاستجابة بعد اكتمال الإخراج لتجنب الإخراج غير الضروري
Response.Flush();
Response.Close();
dr.Close();
conn.Close();
}
#region رمز تم إنشاؤه بواسطة مصمم نماذج الويب
تجاوز OnInit المحمي باطلة (EventArgs e)
{
//
// CODEGEN: هذا الاستدعاء مطلوب من قبل مصمم نماذج ويب ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/// <الملخص>
/// يدعم المصمم الطرق المطلوبة - لا تستخدم محرر التعليمات البرمجية للتعديل
/// محتوى هذه الطريقة.
/// </الملخص>
الفراغ الخاص ()InitializeComponent
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load })
;
#endregion
الخاص void Button1_Click(object sender, System.EventArgs e)
{
Response.Write(Request.Form["dListChild"].ToString());
}
}
}
ورقة البيانات:
معرف المفتاح الأساسيparent_id(int) type_value(int) type_text(varchar)
int يزيد قيمة مربع القائمة المنسدلة الأصلي قيمة مربع القائمة المنسدلة نص مربع القائمة المنسدلة