おそらく「優れている」というと多くの批判があるかもしれませんが、私はそれが本当に良いと思います。更新せずに 20 個ほどのリンクされたドロップダウン リストを見たところ、これのために 2 つ作成するところでした。 、js を介してドロップダウン ボックスにエントリを追加すると、その状態が保存されないため、フォームの送信後に 2 番目のリスト ボックスの値を保持する方法 テスト プラットフォーム: ie6、Firefox。
機能: 第 2 レベルの非リフレッシュ リンク機能: フォームを送信して、データベースからデータを取得し、非リフレッシュ リクエストを実現するために xmlhttp を使用します。より良い方法を見つけてください、教えてください、ありがとうございます、あなたの批判と提案は私にとって大きな励みになります
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>
<頭>
<title>Webフォーム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 ">
<スクリプト言語="javascript">
// jb 関数は、さまざまなブラウザに従って xmlhttp オブジェクトを初期化します。
関数 jb()
{
var A=null;
試す
{
A=new ActiveXObject("Msxml2.XMLHTTP");
}
キャッチ(e)
{
試す
{
A=新しいActiveXObject("Microsoft.XMLHTTP");
}
キャッチ(oc)
{
A=ヌル
}
}
if ( !A && XMLHttpRequest のタイプ != "未定義" )
{
A=新しいXMLHttpRequest()
}
Aを返す
}
//次の Go 関数は、親リスト ボックスが変更され、パラメータが選択された項目になると呼び出されます。
関数 Go(obj)
{
//選択ボックスのドロップダウンリストの値を取得します
var svalue = obj.value;
//データを処理するページを定義する
var weburl = "webform1.aspx?parent_id="+svalue;
//xmlhttp オブジェクトを初期化します
var xmlhttp = jb();
//データを送信します。最初のパラメータは get であることが望ましく、3 番目のパラメータは true であることが望ましいです
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 に追加します。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="server">
<asp:DropDownList onchange="Go(this)" id="dListParent" style="Z-INDEX: 101; LEFT: 248px; POSITION: 絶対; TOP: 40px"
runat="サーバー">
<asp:ListItem Value="100">モトローラ</asp:ListItem>
<asp:ListItem Value="101">ノキア</asp:ListItem>
</asp:ドロップダウンリスト>
<asp:DropDownList id="dListChild" style="Z-INDEX: 102; LEFT: 248px; POSITION: 絶対; TOP: 104px"
runat="server"></asp:DropDownList>
<asp:Button id="Button1" style="Z-INDEX: 103; LEFT: 256px; POSITION: 絶対; TOP: 176px" runat="server"
Text="ボタン"></asp:ボタン>
</form>
</body>
</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
{
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(オブジェクト送信者、System.EventArgs e)
{
//ここにユーザーコードを入力してページを初期化します
//if(!IsPostBack)
//{
BindDrop();//返送されない場合は、リスト ボックスをバインドします
//}
保護された void BindDrop(
)
{
//まず、親ドロップダウンリストもデータベースにバインドしたいと思いますが、後で必要になるとは思いません。
//if(!IsPostBack)
//{
//親をバインド dListParent
//BindParent();
//}
//渡されたparent_id値を取得します。最初のリクエストの場合はnullになります。
文字列 str = Request.QueryString["parent_id"];
文字列 str1 = dListParent.SelectedValue;;
Response.Write(str1);
// str が文字列を追加する場合!=元の文字列は、dListParent の onchange イベントがトリガーされたことを意味します
if((str+"abc")!="abc")
{
// dListChild コントロールをバインドします
BindChild(str);//親 DropDownList の渡された値をパラメータとして使用します
}
それ以外
BindParent(str1);
}
protected void BindParent(string 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 = 新しい SqlConnection(connStr);
//データベースステートメント
string commStr = string.Format("parent_id={0} の電話タイプから type_value,type_text を選択します。",i);
//データベースコマンドオブジェクトを作成
SqlCommand comm = new SqlCommand(commStr,conn);
//データベースを開く
conn.Open();
//コマンドを実行
SqlDataReader dr = comm.ExecuteReader();
//drをループし、エントリをdListParentに追加します
while(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;
//以下を追加することは、送信ボタンをクリックしてフォームを送信したときに 2 番目の dListChild の状態を保存できることを意味します。
dListChild.SelectedValue = Request.Form["dListChild"];
dr.Close();
conn.Close();
}
protected void BindChild(string str)
{
//js を通じてドロップダウンリストを含むコントロールに追加されたコンテンツは保存されません。
//パラメータをintに変換する
int i = Convert.ToInt32(str);
//データベースから返されたデータを保存する文字列を定義します
文字列結果 = "";
//最初に出力をクリアします
Response.Clear();
string connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
SqlConnection conn = 新しい SqlConnection(connStr);
SqlCommand comm = conn.CreateCommand();
string commStr = string.Format("親 ID = {0} の電話タイプからタイプ値、タイプテキストを選択します",i);
comm.CommandText = commStr;
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
while(dr.Read())
{
結果 += ","+dr[0].ToString() +"|" + dr[1].ToString();
//dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
}
//データベースから取得した情報をクライアントに出力する
Response.Write(結果);
//不要な出力を避けるため、出力完了後にレスポンスを閉じる
Response.Flush();
Response.Close();
dr.Close();
conn.Close();
}
#region Web フォーム デザイナーが生成したコード
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: この呼び出しは、ASP.NET Web フォーム デザイナーに必要です。
//
InitializeComponent();
Base.OnInit(e);
}
/// <概要>
/// デザイナーは必要なメソッドをサポートしています - 変更にはコード エディターを使用しないでください
/// このメソッドの内容。
/// </概要>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += 新しい System.EventHandler(this.Page_Load)
;
#endregion
private void Button1_Click(オブジェクト送信者、System.EventArgs e)
{
Response.Write(Request.Form["dListChild"].ToString());
}
}
}
データシート:
主キー IDparent_id(int) type_value(int) type_text(varchar)
int 親ドロップダウン ボックスの値をインクリメントします。 ドロップダウン ボックスの値。 ドロップダウン ボックスのテキスト。