CascadingDropDownList AJAX, DropDownList non si popolano

lunedì 20 aprile 2009 - 18.18

stuzzo Profilo | Junior Member

Ciao a tutti,
volevo chiedervi un aiuto a riguardo delle CascadingDropDownList.
Vi informo subito che la pagina in cui sono presenti queste DropDownList è scritta in C#, mentre il web service è scritto in VB (non l'ho potuto scrivere in C# perchè essendo presende già un altro file in VB, VS mi ha generato un errore dicendomi che dovevo scrivere il file per forza in VB) e i valori che devo inserire li devo prendere da database.
Ho letto diversi tutorial e seguite molte guide, ma alcuni dubbi li ho ancora.
1- Ho notato che viene consigliato di porre l'attributo EnableEventValidation a false, ma io mi trovo ad usare questo controllo in una masterpage che non ha questo attributo, come devo fare ?
2- Vi posto un po' di codice: <table width="100%" cellpadding="0px" cellspacing="0px">
<tr>
<td class="testata-ricerca-rapida">
Ricerca
</td>
</tr>
<tr>
<td class="riga-ricerca-rapida">
Regione
</td>
</tr>
<tr>
<td >
<asp:DropDownList ID="cboFiltroRegioneMaster" runat="server" Width="100%" DataTextField="NomeRegione" DataValueField="IDRegione">
</asp:DropDownList>
<ajaxToolkit:CascadingDropDown ID="cddRegione" runat="server"
TargetControlID="cboFiltroRegioneMaster" ParentControlID="" Category="IDRegione"
PromptText="Selezionare la regione" LoadingText="Carico le regioni"
ServicePath="../PopulateDDL.asmx" ServiceMethod="GetRegioni">
</ajaxToolkit:CascadingDropDown>
</td>
</tr>
<tr>
<td class="riga-ricerca-rapida">
Provincia
</td>
</tr>
<tr>
<td>
<asp:DropDownList ID="cboProvinciaMaster" runat="server" CssClass="TextBox" Width="100%" DataTextField="NomeProvincia" DataValueField="IDProvincia" >
</asp:DropDownList>
<ajaxToolkit:CascadingDropDown ID="cddProvincia" runat="server"
TargetControlID="cboProvinciaMaster" ParentControlID="cboFiltroRegioneMaster" Category="IDProvincia"
PromptText="Selezionare la provincia" LoadingText="Carico le provincie"
ServicePath="../PopulateDDL.asmx" ServiceMethod="GetProvince">
</ajaxToolkit:CascadingDropDown>
</td>
</tr>
<tr >
<td class="riga-ricerca-rapida">
Città
</td>
</tr>

<tr>
<td >
<asp:DropDownList ID="cboCittaMaster" runat="server" CssClass="TextBox" Width="100%" DataTextField="NomeCitta" DataValueField="IDCitta" >
</asp:DropDownList>
<ajaxToolkit:CascadingDropDown ID="ccdCitta" runat="server"
TargetControlID="cboCittaMaster" ParentControlID="cboProvinciaMaster" Category="IDCitta"
PromptText="Selezionare la città" LoadingText="Carico le città"
ServicePath="../PopulateDDL.asmx" ServiceMethod="GetCittà">
</ajaxToolkit:CascadingDropDown>
</td>
</tr>
</table>
Questa è la parte ASP, ma non ho ben capito come richiamare nel code behind il web service.

Questo è il webService
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Collections
Imports System.Collections.Generic
Imports System.Collections.Specialized
Imports AjaxControlToolkit
Imports System.Data
Imports System.Configuration
Imports Business.ContenutoNS


<WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Script.Services.ScriptService()> _
Public Class PopulateDDL
Inherits System.Web.Services.WebService

<WebMethod()> _
Public Function GetRegioni(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Dim _dtRegioni As DataTable
Dim _lstRegions As New List(Of CascadingDropDownNameValue)

_dtRegioni = Regione.Elenca
Dim _i As Integer
For _i = 0 To _dtRegioni.Rows.Count
Dim _strNomeRegione As String = _dtRegioni.Rows(_i)("NomeRegione").ToString()
Dim _strIDRegione As String = _dtRegioni.Rows(_i)("IDRegione").ToString()
_lstRegions.Add(New CascadingDropDownNameValue(_strNomeRegione, _strIDRegione))

Next _i
Return _lstRegions.ToArray()
End Function


<WebMethod()> _
Public Function GetProvince(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()
Dim _sdProvince As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
Dim _idRegione As Integer

If Not _sdProvince.ContainsKey("IDRegione") Or Not Int32.TryParse(_sdProvince("IDRegione"), _idRegione) Then
Return Nothing
End If

Dim _dtProvince As DataTable
_dtProvince = Provincia.ElencaPerRegione(_idRegione)

Dim _lstProvince As New List(Of CascadingDropDownNameValue)

Dim _i As Integer
For _i = 0 To _dtProvince.Rows.Count
Dim _strNomeProvincia As String = _dtProvince.Rows(_i)("NomeProvincia").ToString()
Dim _strIDProvincia As String = _dtProvince.Rows(_i)("IDProvincia").ToString()
_lstProvince.Add(New CascadingDropDownNameValue(_strNomeProvincia, _strIDProvincia))
Next _i

Return _lstProvince.ToArray
End Function
<WebMethod()> _
Public Function GetCitta(ByVal knownCategoryValues As String, ByVal category As String) As CascadingDropDownNameValue()

Dim _sdCitta As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)

Dim _intPronvinciaId As Integer

If Not _sdCitta.ContainsKey("IDProvincia") Or Not Int32.TryParse(_sdCitta("IDProvincia"), _intPronvinciaId) Then
Return Nothing
End If

Dim _dtCitta As DataTable
Dim _lstCitta As New List(Of CascadingDropDownNameValue)

_dtCitta = Citta.ElencaPerProvincia(_intPronvinciaId)

Dim _i As Integer
For _i = 0 To _dtCitta.Rows.Count
Dim _strNomeCitta As String = _dtCitta.Rows(_i)("NomeCitta").ToString()
Dim _strIDCitta As String = _dtCitta.Rows(_i)("IDCitta").ToString()
_lstCitta.Add(New CascadingDropDownNameValue(_strNomeCitta, _strIDCitta))
Next _i

Return _lstCitta.ToArray
End Function

End Class

Ogni consiglio è ben accetto :)
Grazie
Alfredo Aiello

fguida Profilo | Expert

Ma le CascadingDropDownList funzionano solo con gli .asmx?
Francesco

4mane Profilo | Junior Member

Nel tag della pagina hai inserito la proprietà
EnableEventValidation="false"
?

stuzzo Profilo | Junior Member

>Nel tag della pagina hai inserito la proprietà
>EnableEventValidation="false" ?

Purtroppo non posso, in quanto il meccanismo AJAX è all'interno della masterPage, che non prevede l'EnableEventValidation nella direttiva principale.
Alfredo Aiello

4mane Profilo | Junior Member

Ma i controlli AJAX sono nella MasterPage?

stuzzo Profilo | Junior Member

Si, sono nella Master.
Alfredo Aiello

4mane Profilo | Junior Member

>Public Function GetProvince(ByVal knownCategoryValues As String,
>ByVal category As String) As CascadingDropDownNameValue()
>Dim _sdProvince As StringDictionary = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)
> Dim _idRegione As Integer
>
>If Not _sdProvince.ContainsKey("IDRegione") Or Not Int32.TryParse(_sdProvince("IDRegione"),
>_idRegione) Then
> Return Nothing
> End If
...
...

In luogo di:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
prova a scrivere ciò:
Dim _categoryValues As String() = knownCategoryValues.Split(":"c, ";"c) idRegione = Convert.ToInt32(_categoryValues(1))
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5