Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mélange de jscript et server-side

1 réponse
Avatar
Derek Amsterdam
Bonjour,
En asp classic j'utilise parfois une combinaison de javascript et asp pour
performer des tâches du côté client. Entre autre pour des listbox dépendent.
Je cherche depuis une bonne grosse journée comment faire la même chose en
.net c#.

Bon, j'ai essayer un paquets de choses, vue un paquets d'exemple different
les uns des autres mais j'ai juste vu du "postback" la plupart du temps.. je
veux pas faire de refresh. Je veux juste remplir des tableaux javascript
avec du data de la db et me servir de ces tableaux sur le "onchange" event
du select ou du dropdownlist... peut importe. Je veux juste faire ce que je
pouvais faire auparavant en asp classic! :-)

Quelqu'un peut m'expliquer ou me donner un lien ou je peux comprendre
comment faire le même procédé mais en c# .net?

j'ai mis les bouts de code que j'utilise en classic, qui fonctionne tres
bien. ya deux listbox, au load de la page les tableaux javascript sont
rempli et le premier list box en rempli. Apres, dépendemment du choix dans
le premier, le second est rempli avec du javascript avec les données
concordante. Mais toute est du côté client. Donc pas de refresh que ce soit.
Comme vous pouvez voir, j'ai dans la premiere liste une liste de continent.
Quand un continent est choisi les pays de ce continent sont afficher dans la
seconde. Encore une fois, toute du côté client.



Merci beaucoup.


===========================================================================
le Javascript

<script language="Javascript">
<%
Set rsContinent = Server.CreateObject("ADODB.Recordset")
Set rsCountries = Server.CreateObject("ADODB.Recordset")
psql = "SELECT DISTINCT continent FROM paises"
psql = psql & " ORDER BY Continent asc;"
rsContinent.Open psql, connection
Do while not rsContinent.Eof
sqlCountries = "SELECT nombre_en,TMDomainOpt FROM paises WHERE"
sqlCountries = sqlCountries & " Continent ='" & rsContinent("Continent")
& "'"
sqlCountries = sqlCountries & " AND (TMDomainOpt = 0 OR TMDomainOpt = 2)
ORDER BY nombre_en ASC"
rsCountries.Open sqlCountries, connection
Do while not rsCountries.Eof
If arrTemp = "" Then
arrTemp = "'" & rsCountries("nombre_en") & "'"
Else
arrTemp = arrTemp & ",'" & rsCountries("nombre_en") & "'"
End If
rsCountries.MoveNext
Loop
rsCountries.Close
ContinentValue = rsContinent("continent")
%>
//Countries array
var arrTrd<%=ContinentValue%> = new Array(<%=arrTemp%>);
<%
arrTemp = ""

'Building the continent array
If Continent = "" Then
Continent = "'" & rsContinent("continent") & "'"
Else
Continent = Continent & ",'" & rsContinent("continent") & "'"
End If
rsContinent.MoveNext
Loop
rsContinent.Close
Set rsContinent = Nothing
Set rsCountriestid = Nothing

%>
//Continent array
var arrTrdContinent = new Array(<%=Continent%>);

<%
Continent = ""
Set rsContinent = Server.CreateObject("ADODB.Recordset")
Set rsCountries = Server.CreateObject("ADODB.Recordset")
psql = "SELECT DISTINCT continent FROM paises"
psql = psql & " ORDER BY Continent asc;"
rsContinent.Open psql, connection
Do while not rsContinent.Eof
sqlCountries = "SELECT nombre_en,extencion FROM paises WHERE"
sqlCountries = sqlCountries & " Continent ='" & rsContinent("Continent")
& "'"
sqlCountries = sqlCountries & " AND (TMDomainOpt = 1 OR TMDomainOpt = 2)
ORDER BY nombre_en ASC"
rsCountries.Open sqlCountries, connection
Do while not rsCountries.Eof
If arrTemp = "" Then
arrTemp = "'" & rsCountries("nombre_en") & ";" &
rsCountries("extencion") & "'"
Else
arrTemp = arrTemp & ",'" & rsCountries("nombre_en") & ";" &
rsCountries("extencion") & "'"
End If
rsCountries.MoveNext
Loop
rsCountries.Close
ContinentValue = rsContinent("continent")
%>
//Countries array
var arrDom<%=ContinentValue%> = new Array(<%=arrTemp%>);
<%
arrTemp = ""

'Building the continent array
If Continent = "" Then
Continent = "'" & rsContinent("continent") & "'"
Else
Continent = Continent & ",'" & rsContinent("continent") & "'"
End If
rsContinent.MoveNext
Loop
rsContinent.Close
Set rsContinent = Nothing
Set rsCountriestid = Nothing

%>
//Continent array
var arrDomContinent = new Array(<%=Continent%>);


function fillTrdCountries(selContinent,theform)
{
if(selContinent !="")
{

var trimString="";
var repChar="";
for ( i = 0; i < selContinent.length; i++) {
theChar=selContinent.substring ( i, i+1);
if ( theChar == " ") {
trimString += repChar
} else {
trimString+=selContinent.substring ( i, i+1);
}
}

document.forms[theform].selCountries.options.length = 1;
selContinent=(trimString);
theContinent = "arrTrd" + selContinent;
newOptions = eval(theContinent);

for ( i=0; i<newOptions.length; i++ )
{
document.forms[theform].selCountries.length=i+1;
thisEntry = newOptions[i];
newOption = new Option(thisEntry);

//slip the deptid and the deptname
newOption.value = thisEntry;
newOption.text = Left(thisEntry,14);
document.forms[theform].selCountries.options[i+1] = newOption;
}
//put the focus on the first entry of the list box
document.forms[theform].selCountries.options[0].selected = true;
}

}

function fillDomCountries(selContinent,theform)
{
if(selContinent !="")
{

var trimString="";
var repChar="";
for ( i = 0; i < selContinent.length; i++) {
theChar=selContinent.substring ( i, i+1);
if ( theChar == " ") {
trimString += repChar
} else {
trimString+=selContinent.substring ( i, i+1);
}
}

document.forms[theform].selCountries.options.length = 1;
selContinent=(trimString);
theContinent = "arrDom" + selContinent;
newOptions = eval(theContinent);

for ( i=0; i<newOptions.length; i++ )
{
document.forms[theform].selCountries.length=i+1;
thisEntry = newOptions[i];
newOption = new Option(thisEntry);

//slip
thisEntry = thisEntry.split(";");
newOption.value = thisEntry[0];
newOption.text = Left(thisEntry[0]) + " " + thisEntry[1];
document.forms[theform].selCountries.options[i+1] = newOption;
}
//put the focus on the first entry of the list box
document.forms[theform].selCountries.options[0].selected = true;
}

}
</script>
============================================================================
=

et les deux list box

<SELECT name="selContinent"
onchange="fillTrdCountries(this.options[selectedIndex].value,'globalNavigati
on')" >
<option>-Select Continent-</option>
<script LANGUAGE="JavaScript">
var thevalue = "";
for( var x=1; x<arrTrdContinent.length; x++ ) {
document.write('<OPTION VALUE=\''+arrTrdContinent[x]+'\'');
if(arrTrdContinent[x] == '') {
document.write(' SELECTED');
}
else if(arrTrdContinent[x] == 'camerica'){
thevalue = "Central America";
}
else if(arrTrdContinent[x] == 'samerica'){
thevalue = "South America";
}
else if(arrTrdContinent[x] == 'namerica'){
thevalue = "North America";
}
else{
thevalue = arrTrdContinent[x];
}
document.write('>' + thevalue + '</OPTION>');
}
</SCRIPT>
</select>

<SELECT onchange="goUrl(this.options[selectedIndex].value)"
name="selCountries">
<option value="" selected>Country</option>
</select>

1 réponse

Avatar
Derek Amsterdam
He bin.. pour ceux que sa peut interesser, j'ai ma solution.
premierement le code javascript qui en asp classic est généré en combinant
vbscript/javascript se fait sensiblement de la meme façon et j'utilise le
"RegisterArrayDeclaration" pour "injecter" les tableaux javascript qui
contiennent les valeurs de la deuxieme "listbox". et le reste est encore une
fois sensiblement pareil.

public class default : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{

//Inject javascript arrays that will hold the associated
//countries of each continents
RegisterJscriptArray("NorthAmerica","North America");
RegisterJscriptArray("SouthAmerica","South America");
RegisterJscriptArray("CentralAmerica","Central America");
RegisterJscriptArray("Europe","Europe");
RegisterJscriptArray("Asia","Asia");

}

private void RegisterJscriptArray(string sContinentCode, string
sContinent)
{
DataTable oDT;
oDT = CreateDataSource(sContinent);

//declare a string array that will contain the countries associated
//with this continent
string [] CountryName = new string[oDT.Rows.Count];

for(int i=0;i<oDT.Rows.Count;i++){
CountryName[i] = oDT.Rows[i]["Code"].ToString() + ";" +
oDT.Rows[i]["Name"].ToString();
}
oDT.Dispose();
oDT = null;

//inject in the output page
this.RegisterArrayDeclaration(sContinentCode,"'" +
String.Join("','",CountryName) + "'");

}
private DataTable CreateDataSource(string sContinent)
{
CountriesData.CountriesDataTable dt = new
Countries().GetByContinent(sContinent);
return dt;
}


donc dans le "html" generer je me retrouve avec ce que je veux, c-a-d des
tableaux javascript qui contiennent des valeurs provenant de la db.
i.e

<script language="javascript" type="text/javascript">
<!--
var NorthAmerica = new Array('USA;USA','CANADA;Canada');
var SouthAmerica = new
Array('COLOMBIA;Colombia','VENEZUELA;Venezuela','ECUADOR;Ecuador','PERU;Peru
','CHILE;Chile','BRAZIL;Brazil','PARAGUAY;Paraguay','URUGUAY;Uruguay','ARGEN
TINA;Argentina');
// -->
</script>

De cette facon la, je peux jouer tant que je veux avec les listbox sans etre
obliger de faire un "round trip" au server de nouveau pour faire un query
pour le second listbox dependemment du choix du premier et sans avoir le
"postback =true" non plus. Parce que personnellement, postback ou whatever..
sa refresh la page pareil pis c'est pas ce que je voulais.

En tout cas.. beaucoup de temps pis de recherche mais des resultats!

pour le voir en action
ASP Classic -> http://www.marcaria.com ( les dropdown a gauche )

Et celui en DotNet c# -> http://www.patentarea.com/default1.aspx ou
http://www.patentarea.com/default.aspx


Donc dossier fermer.. :-)


"Derek Amsterdam" a écrit dans le message de
news:%23bf%
Bonjour,
En asp classic j'utilise parfois une combinaison de javascript et asp


pour
performer des tâches du côté client. Entre autre pour des listbox


dépendent.
Je cherche depuis une bonne grosse journée comment faire la même chose en
.net c#.

Bon, j'ai essayer un paquets de choses, vue un paquets d'exemple different
les uns des autres mais j'ai juste vu du "postback" la plupart du temps..


je
veux pas faire de refresh. Je veux juste remplir des tableaux javascript
avec du data de la db et me servir de ces tableaux sur le "onchange" event
du select ou du dropdownlist... peut importe. Je veux juste faire ce que


je
pouvais faire auparavant en asp classic! :-)

Quelqu'un peut m'expliquer ou me donner un lien ou je peux comprendre
comment faire le même procédé mais en c# .net?

j'ai mis les bouts de code que j'utilise en classic, qui fonctionne tres
bien. ya deux listbox, au load de la page les tableaux javascript sont
rempli et le premier list box en rempli. Apres, dépendemment du choix dans
le premier, le second est rempli avec du javascript avec les données
concordante. Mais toute est du côté client. Donc pas de refresh que ce


soit.
Comme vous pouvez voir, j'ai dans la premiere liste une liste de


continent.
Quand un continent est choisi les pays de ce continent sont afficher dans


la
seconde. Encore une fois, toute du côté client.



Merci beaucoup.





========================================================================== > le Javascript

<script language="Javascript">
<%
Set rsContinent = Server.CreateObject("ADODB.Recordset")
Set rsCountries = Server.CreateObject("ADODB.Recordset")
psql = "SELECT DISTINCT continent FROM paises"
psql = psql & " ORDER BY Continent asc;"
rsContinent.Open psql, connection
Do while not rsContinent.Eof
sqlCountries = "SELECT nombre_en,TMDomainOpt FROM paises WHERE"
sqlCountries = sqlCountries & " Continent ='" &


rsContinent("Continent")
& "'"
sqlCountries = sqlCountries & " AND (TMDomainOpt = 0 OR TMDomainOpt 2)
ORDER BY nombre_en ASC"
rsCountries.Open sqlCountries, connection
Do while not rsCountries.Eof
If arrTemp = "" Then
arrTemp = "'" & rsCountries("nombre_en") & "'"
Else
arrTemp = arrTemp & ",'" & rsCountries("nombre_en") & "'"
End If
rsCountries.MoveNext
Loop
rsCountries.Close
ContinentValue = rsContinent("continent")
%>
//Countries array
var arrTrd<%=ContinentValue%> = new Array(<%=arrTemp%>);
<%
arrTemp = ""

'Building the continent array
If Continent = "" Then
Continent = "'" & rsContinent("continent") & "'"
Else
Continent = Continent & ",'" & rsContinent("continent") & "'"
End If
rsContinent.MoveNext
Loop
rsContinent.Close
Set rsContinent = Nothing
Set rsCountriestid = Nothing

%>
//Continent array
var arrTrdContinent = new Array(<%=Continent%>);

<%
Continent = ""
Set rsContinent = Server.CreateObject("ADODB.Recordset")
Set rsCountries = Server.CreateObject("ADODB.Recordset")
psql = "SELECT DISTINCT continent FROM paises"
psql = psql & " ORDER BY Continent asc;"
rsContinent.Open psql, connection
Do while not rsContinent.Eof
sqlCountries = "SELECT nombre_en,extencion FROM paises WHERE"
sqlCountries = sqlCountries & " Continent ='" &


rsContinent("Continent")
& "'"
sqlCountries = sqlCountries & " AND (TMDomainOpt = 1 OR TMDomainOpt 2)
ORDER BY nombre_en ASC"
rsCountries.Open sqlCountries, connection
Do while not rsCountries.Eof
If arrTemp = "" Then
arrTemp = "'" & rsCountries("nombre_en") & ";" &
rsCountries("extencion") & "'"
Else
arrTemp = arrTemp & ",'" & rsCountries("nombre_en") & ";" &
rsCountries("extencion") & "'"
End If
rsCountries.MoveNext
Loop
rsCountries.Close
ContinentValue = rsContinent("continent")
%>
//Countries array
var arrDom<%=ContinentValue%> = new Array(<%=arrTemp%>);
<%
arrTemp = ""

'Building the continent array
If Continent = "" Then
Continent = "'" & rsContinent("continent") & "'"
Else
Continent = Continent & ",'" & rsContinent("continent") & "'"
End If
rsContinent.MoveNext
Loop
rsContinent.Close
Set rsContinent = Nothing
Set rsCountriestid = Nothing

%>
//Continent array
var arrDomContinent = new Array(<%=Continent%>);


function fillTrdCountries(selContinent,theform)
{
if(selContinent !="")
{

var trimString="";
var repChar="";
for ( i = 0; i < selContinent.length; i++) {
theChar=selContinent.substring ( i, i+1);
if ( theChar == " ") {
trimString += repChar
} else {
trimString+=selContinent.substring ( i, i+1);
}
}

document.forms[theform].selCountries.options.length = 1;
selContinent=(trimString);
theContinent = "arrTrd" + selContinent;
newOptions = eval(theContinent);

for ( i=0; i<newOptions.length; i++ )
{
document.forms[theform].selCountries.length=i+1;
thisEntry = newOptions[i];
newOption = new Option(thisEntry);

//slip the deptid and the deptname
newOption.value = thisEntry;
newOption.text = Left(thisEntry,14);
document.forms[theform].selCountries.options[i+1] = newOption;
}
//put the focus on the first entry of the list box
document.forms[theform].selCountries.options[0].selected = true;
}

}

function fillDomCountries(selContinent,theform)
{
if(selContinent !="")
{

var trimString="";
var repChar="";
for ( i = 0; i < selContinent.length; i++) {
theChar=selContinent.substring ( i, i+1);
if ( theChar == " ") {
trimString += repChar
} else {
trimString+=selContinent.substring ( i, i+1);
}
}

document.forms[theform].selCountries.options.length = 1;
selContinent=(trimString);
theContinent = "arrDom" + selContinent;
newOptions = eval(theContinent);

for ( i=0; i<newOptions.length; i++ )
{
document.forms[theform].selCountries.length=i+1;
thisEntry = newOptions[i];
newOption = new Option(thisEntry);

//slip
thisEntry = thisEntry.split(";");
newOption.value = thisEntry[0];
newOption.text = Left(thisEntry[0]) + " " + thisEntry[1];
document.forms[theform].selCountries.options[i+1] = newOption;
}
//put the focus on the first entry of the list box
document.forms[theform].selCountries.options[0].selected = true;
}

}
</script>



=========================================================================== > >
et les deux list box

<SELECT name="selContinent"



onchange="fillTrdCountries(this.options[selectedIndex].value,'globalNavigati
on')" >
<option>-Select Continent-</option>
<script LANGUAGE="JavaScript">
var thevalue = "";
for( var x=1; x<arrTrdContinent.length; x++ ) {
document.write('<OPTION VALUE=''+arrTrdContinent[x]+''');
if(arrTrdContinent[x] == '') {
document.write(' SELECTED');
}
else if(arrTrdContinent[x] == 'camerica'){
thevalue = "Central America";
}
else if(arrTrdContinent[x] == 'samerica'){
thevalue = "South America";
}
else if(arrTrdContinent[x] == 'namerica'){
thevalue = "North America";
}
else{
thevalue = arrTrdContinent[x];
}
document.write('>' + thevalue + '</OPTION>');
}
</SCRIPT>
</select>

<SELECT onchange="goUrl(this.options[selectedIndex].value)"
name="selCountries">
<option value="" selected>Country</option>
</select>