Talvez "excelente" traga muitas críticas, mas acho que é muito bom. Eu olhei cerca de 20 listas suspensas vinculadas sem atualizar, e elas estavam uma bagunça no Firefox. Quase fiz duas para isso. , como manter o valor da segunda caixa de listagem após enviar o formulário, pois se você adicionar entradas à caixa suspensa por meio de js, seu estado não será salvo Plataforma de teste: ie6, firefox.
Função: ligação sem atualização de segundo nível Recursos: Entre navegadores, envie o formulário para obter o valor da segunda caixa suspensa de dados provenientes do banco de dados, use xmlhttp para enviar solicitações para obter solicitações de não atualização; encontre um método melhor, por favor Diga-me, muito obrigado, suas críticas e sugestões são um grande incentivo para mim
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>
<CABEÇA>
<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 ">
<linguagem script="javascript">
//A função jb inicializará um objeto xmlhttp de acordo com diferentes navegadores
função jb()
{
var A=nulo;
tentar
{
A=novo ActiveXObject("Msxml2.XMLHTTP");
}
pegar (e)
{
tentar
{
A=novo ActiveXObject("Microsoft.XMLHTTP");
}
pegar (oc)
{
A = nulo
}
}
if ( !A && typeof XMLHttpRequest != "indefinido" )
{
A = novo XMLHttpRequest()
}
retornar A
}
//A seguinte função Go é chamada quando a caixa de listagem pai muda e o parâmetro é o item selecionado.
função Ir (obj)
{
//Obtém o valor da lista suspensa da caixa de seleção
var valor = obj.valor;
//Define a página para processar os dados
var weburl = "webform1.aspx?parent_id="+svalue;
//Inicializa um objeto xmlhttp
var xmlhttp = jb();
//Envia os dados, o primeiro parâmetro é preferencialmente get e o terceiro parâmetro é preferencialmente true
xmlhttp.open("get",weburl,true);
// alerta(xmlhttp.responseText);
//Se os dados foram retornados com sucesso
xmlhttp.onreadystatechange=função()
{
if(xmlhttp.readyState==4)//4 representa retorno de dados bem-sucedido
{
var result = xmlhttp.responseText;//Obtém os dados retornados pelo servidor
//Primeiro limpa todos os itens suspensos de dListChild
document.getElementById("dListChild").length = 0;
//Adiciona todos os modelos ao dListChild. Observe que Option não é opção.
document.getElementById("dListChild").options.add(new Option("Todos os modelos","0"));
if(resultado!="")//Se os dados retornados não estiverem vazios
{
//Divide a string recebida em arrays de acordo com
var allArray = resultado.split(",");
// Faz um loop neste array, observe que ele começa em 1, pois o primeiro caractere da string recebida é ,, então o primeiro array após a divisão está vazio
for(var i=1;i<allArray.length;i++)
{
//Divida esta string em arrays de acordo com |
var thisArray = allArray[i].split("|");
//Adiciona entradas ao dListChild
document.getElementById("dListChild").options.add(new Option(thisArray[1].toString(),thisArray[0].toString()));
}
}
}
}
//Enviar dados, preste atenção na ordem e nos parâmetros Os parâmetros devem ser nulos ou ""
xmlhttp.send(nulo);
}
</script>
</HEAD>
<corpo MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="servidor">
<asp:DropDownList onchange="Go(this)" id="dListParent" style="Z-INDEX: 101; ESQUERDA: 248px; POSIÇÃO: absoluta; SUPERIOR: 40px"
runat="servidor">
<asp:ListItem Value="100">Motorola</asp:ListItem>
<asp:ListItem Value="101">Nokia</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList id="dListChild" style="Z-INDEX: 102; ESQUERDA: 248px; POSIÇÃO: absoluta; SUPERIOR: 104px"
runat="servidor"></asp:DropDownList>
<asp:Button id="Button1" style="Z-INDEX: 103; ESQUERDA: 256px; POSIÇÃO: absoluta; SUPERIOR: 176px" runat="servidor"
Text="Botão"></asp:Botão>
</form>
</body>
</HTML>
Back-end webform1.aspx.cs:
usando o sistema;
usando System.Collections;
usando System.ComponentModel;
usando System.Data;
usando System.Drawing;
usando System.Web;
usando System.Web.SessionState;
usando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.HtmlControls;
usando System.Configuration;
usando System.Data.SqlClient
;
{
/// <resumo>
/// Descrição resumida do WebForm1.
/// </sumário>
classe pública WebForm1: System.Web.UI.Page
{
System.Web.UI.WebControls.DropDownList protegido dListParent;
System.Web.UI.WebControls.Button protegido Button1;
System.Web.UI.WebControls.DropDownList dListChild protegido;
private void Page_Load (remetente do objeto, System.EventArgs e)
{
//Coloque aqui o código do usuário para inicializar a página
//se(!IsPostBack)
//{
BindDrop();//Se não for enviado de volta, vincula o list box
//}
}
void protegido BindDrop()
{
//Em primeiro lugar, quero que a lista suspensa pai também esteja vinculada ao banco de dados, mas não acho que isso seja necessário mais tarde.
//se(!IsPostBack)
//{
// Vincula o pai dListParent
//BindParent();
//}
//Obtém o valor parent_id passado, se for a primeira requisição será nulo
string str = Request.QueryString["parent_id"];
string str1 = dListParent.SelectedValue;;
Resposta.Write(str1);
//Se str adiciona uma string!=a string original, significa que o evento onchange de dListParent foi acionado
if((str+"abc")!="abc")
{
// Vincula o controle dListChild
BindChild(str);//Use o valor passado do pai DropDownList como parâmetro
}
outro
BindParent(str1);
}
void protegido BindParent(string str)
{
//Se for a primeira requisição ou a página for atualizada, ela será selecionada com base no valor de dListParent.
//Converte parâmetros em int
int i = Convert.ToInt32(str);
dListChild.Items.Clear();
dListChild.Items.Add(new ListItem("Todos os modelos","0"));
//Obtém a string de conexão do banco de dados
string connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
//Inicializa um objeto conn
Conexão SqlConnection = new SqlConnection(connStr);
//instrução do banco de dados
string commStr = string.Format("selecione type_value,type_text de phone_type onde parent_id={0}",i);
//Cria objeto de comando do banco de dados
SqlCommand comm = new SqlCommand(commStr,conn);
//Abre o banco de dados
conexão.Open();
//Executa o comando
SqlDataReader dr = comm.ExecuteReader();
// Faz um loop dr e adiciona entradas ao dListParent
enquanto(dr.Leitura())
{
dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
//Também pode ser assim
//dListParent.Items.Add(new ListItem(dr["phone_text"].ToString(),dr["phone_value"].ToString()));
}
dListParent.Items[0].Selected = true;
//Adicionar o seguinte significa que o estado do segundo dListChild pode ser salvo quando o botão enviar é clicado para enviar o formulário.
dListChild.SelectedValue = Request.Form["dListChild"];
dr.Fechar();
conexão.Fechar();
}
vazio protegido BindChild(string str)
{
//O conteúdo adicionado através de js a qualquer controle, incluindo lista suspensa, não será salvo.
//Converte parâmetros em int
int i = Convert.ToInt32(str);
//Defina uma string para salvar os dados retornados do banco de dados
string resultado = "";
//Limpa a saída primeiro
Response.Clear();
string connStr = ConfigurationSettings.AppSettings["ConnString"].ToString();
Conexão SqlConnection = new SqlConnection(connStr);
SqlCommand comm = conn.CreateCommand();
string commStr = string.Format("selecione type_value,type_text de phone_type onde parent_id = {0}",i);
comm.CommandText = commStr;
conexão.Open();
SqlDataReader dr = comm.ExecuteReader();
enquanto(dr.Leitura())
{
resultado += ","+dr[0].ToString() +"|" + dr[1].ToString();
//dListChild.Items.Add(new ListItem(dr[1].ToString(),dr[0].ToString()));
}
//Envia as informações obtidas do banco de dados para o cliente
Response.Write(resultado);
//Fecha a resposta após a saída ser concluída para evitar saída desnecessária
Response.Flush();
Response.Close();
dr.Fechar();
conexão.Fechar();
}
#region Código gerado pelo Web Forms Designer
substituir void protegido OnInit (EventArgs e)
{
//
// CODEGEN: Esta chamada é exigida pelo designer de Web Forms do ASP.NET.
//
InitializeComponent();
base.OnInit(e);
}
/// <resumo>
/// O Designer suporta métodos necessários - não use o editor de código para modificar
/// O conteúdo deste método.
/// </sumário>
privado vazio InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load })
;
#endregion
private void Button1_Click(objeto remetente, System.EventArgs e)
{
Response.Write(Request.Form["dListChild"].ToString());
}
}
}
Ficha de dados:
ID da chave primária parent_id(int) type_value(int) type_text(varchar)
int incrementa o valor da caixa suspensa pai o valor da caixa suspensa o texto da caixa suspensa