"훌륭하다"는 말은 많이 나올지도 모르지만, 정말 좋은 것 같아요. 링크된 드롭다운 목록을 새로고침하지 않고 20개 정도 봤는데, Firefox에서는 거의 2개나 만들 뻔했어요. , 양식을 제출한 후 두 번째 목록 상자의 값을 유지하는 방법. 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" >
<HTML>
<헤드>
<title>웹폼1</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 객체를 초기화합니다.
함수 jb()
{
var A=널;
노력하다
{
A=new ActiveXObject("Msxml2.XMLHTTP");
}
잡기(e)
{
노력하다
{
A=new ActiveXObject("Microsoft.XMLHTTP");
}
잡기(oc)
{
A=널
}
}
if ( !A && typeof XMLHttpRequest != "정의되지 않음" )
{
A=새 XMLHttpRequest()
}
A를 반환하다
}
//부모 목록 상자가 변경되면 다음 Go 함수가 호출되며 매개변수는 선택된 항목입니다.
함수 Go(obj)
{
//선택 상자의 드롭다운 목록 값을 가져옵니다.
var svalue = obj.value;
//데이터를 처리할 페이지 정의
var weburl = "webform1.aspx?parent_id="+svalue;
//xmlhttp 객체 초기화
var xmlhttp = jb();
//데이터 제출, 첫 번째 매개변수는 get이 바람직하고, 세 번째 매개변수는 true가 바람직함
xmlhttp.open("get",weburl,true);
// 경고(xmlhttp.responseText);
//데이터가 성공적으로 반환된 경우
xmlhttp.onreadystatechange=함수()
{
if(xmlhttp.readyState==4)//4는 성공적인 데이터 반환을 나타냅니다.
{
var result = xmlhttp.responseText;//서버에서 반환된 데이터 가져오기
//먼저 dListChild의 모든 드롭다운 항목을 지웁니다.
document.getElementById("dListChild").length = 0;
//dListChild에 모든 모델을 추가합니다. Option은 옵션이 아닙니다.
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()));
}
}
}
}
//데이터를 보내려면 순서와 매개변수에 주의하세요. 매개변수는 null 또는 ""여야 합니다.
xmlhttp.send(null);
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="서버">
<asp:DropDownList onchange="이동(this)" id="dListParent" style="Z-INDEX: 101; 왼쪽: 248px; 위치: 절대; TOP: 40px"
runat="서버">
<asp:ListItem Value="100">모토로라</asp:ListItem>
<asp:ListItem Value="101">노키아</asp:ListItem>
</asp:드롭다운리스트>
<asp:DropDownList id="dListChild" style="Z-INDEX: 102; 왼쪽: 248px; 위치: 절대; TOP: 104px"
runat="서버"></asp:DropDownList>
<asp:Button id="Button1" style="Z-INDEX: 103; 왼쪽: 256px; 위치: 절대; TOP: 176px" runat="서버"
텍스트="버튼"></asp:버튼>
</form>
</body>
</HTML>
백엔드 webform1.aspx.cs:
시스템 사용;
System.Collections 사용;
System.ComponentModel 사용;
System.Data 사용;
System.드로잉 사용;
System.Web 사용;
System.Web.SessionState 사용;
System.Web.UI 사용;
System.Web.UI.WebControls 사용;
System.Web.UI.HtmlControls 사용;
System.Configuration 사용;
System.Data.SqlClient
네임스페이스 삭제
사용
{
/// <요약>
/// WebForm1에 대한 요약 설명입니다.
/// </summary>
공개 클래스 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)
{
//페이지를 초기화하려면 여기에 사용자 코드를 입력하세요.
//if(!IsPostBack)
//{
BindDrop();//다시 제출되지 않으면 목록 상자를 바인딩합니다.
//}
}
보호된 무효 BindDrop()
{
//우선 상위 드롭다운 목록도 데이터베이스에 바인딩하고 싶지만 나중에는 필요하지 않을 것 같습니다.
//if(!IsPostBack)
//{
//부모 dListParent 바인딩
//BindParent();
//}
//전달된 parent_id 값을 가져옵니다. 첫 번째 요청인 경우 null이 됩니다.
string str = Request.QueryString["parent_id"];
문자열 str1 = dListParent.SelectedValue;;
응답.쓰기(str1);
//str에 문자열!=원래 문자열을 추가하면 dListParent의 onchange 이벤트가 트리거되었음을 의미합니다.
if((str+"abc")!="abc")
{
//dListChild 컨트롤 바인딩
BindChild(str);//상위 DropDownList의 전달된 값을 매개변수로 사용
}
또 다른
BindParent(str1);
}
보호된 무효 BindParent(문자열 str)
{
//첫 번째 요청이거나 페이지를 새로 고칠 경우 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("phone_type에서 type_value,type_text를 선택하세요(여기서 parent_id={0}",i);
//데이터베이스 명령 객체 생성
SqlCommand comm = new SqlCommand(commStr,conn);
//데이터베이스 열기
conn.Open();
//명령 실행
SqlDataReader dr = comm.ExecuteReader();
//dr을 반복하고 dListParent에 항목을 추가합니다.
동안(dr.Read())
{
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 = 요청.양식["dListChild"];
dr.닫기();
conn.Close();
}
보호된 무효 BindChild(문자열 str)
{
//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("parent_id = {0}인 Phone_type에서 type_value,type_text를 선택하십시오.",i);
comm.CommandText = commStr;
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
동안(dr.Read())
{
결과 += ","+dr[0].ToString() +"|" + dr[1].ToString();
//dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
}
//데이터베이스에서 얻은 정보를 클라이언트에 출력
응답.쓰기(결과);
//불필요한 출력을 방지하기 위해 출력 완료 후 응답 닫기
응답.플러시();
응답.닫기();
dr.닫기();
conn.Close();
}
#region Web Forms 디자이너 생성 코드
보호된 void OnInit(EventArgs e) 재정의
{
//
// CODEGEN: 이 호출은 ASP.NET Web Forms 디자이너에 필요합니다.
//
초기화구성요소();
base.OnInit(e);
}
/// <요약>
/// 디자이너는 필수 메서드를 지원합니다. 코드 편집기를 사용하여 수정하지 마세요.
/// 이 메소드의 내용입니다.
/// </summary>
개인 무효 초기화 구성 요소()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load)
}
#endregion
private void Button1_Click(개체 전송자, System.EventArgs e)
{
Response.Write(Request.Form["dListChild"].ToString());
}
}
}
데이터 시트:
기본 키 ID parent_id(int) type_value(int) type_text(varchar)
int는 상위 드롭다운 상자의 값을 증가시킵니다. 드롭다운 상자의 값 드롭다운 상자의 텍스트입니다.