Quando programmare diventa quasi un paradosso...
Siamo sempre nell'ambito web, e in questi giorni mi sto divertendo un sacco con Ajax, devo dire che bisogna pestarci un
po la testa.. ma il risultato può essere sorprendente.
Diciamo pure che questo è l'ennesima evoluzione del controllo AutoCompleteExtender.... di cui ho scritto qualcosa
qualche giorno fa.. (se tutto va bene l'altro ieri).
Il concetto di aiutare l'utente nella composizione di un dato, è cosa buona, è più complessa quando quanto dobbiamo
prelevare è il frutto di una query fatta su una vista con 20 colonne... e strano a dirsi è necessario mostrare tutti i 20
attributi, in un form.
Va da se che se mostro nella lista del AutoCompleteExtender tutti i 20 campi.. anche l'utente più sgamato si ritrova
nel pieno dell'incomprensibilità di ciò che sta leggendo.
Quindi torna utile pubblicare nella lista del AutoCompleteExtender solo lo stretto necessario ... e riportarlo al lato
Client.
Qui mi è sorto un dubbio .. e da qui come ritorno sul server ?? magia ?? Prestidirigilibizzazione ?? no...
patiamo dalla form e da ciò che contiene:
asp:ToolkitScriptManager ID="tsMain" runat="server" EnablePageMethods="True"
/asp:ToolkitScriptManager
asp:TextBox ID="txtrSearch" runat="server" Text=""/asp:TextBox
asp:AutoCompleteExtender ID="AutoCompleteExtenderDemo" runat="server"
TargetControlID="txtrSearch" ServiceMethod="GetCompletionList"
MinimumPrefixLength="1" CompletionInterval="1000"
EnableCaching="true" CompletionSetCount="10" OnClientItemSelected="ItemForSplit"
/asp:AutoCompleteExtender
asp:TextBox ID="txtDemo" runat="server" /asp:TextBox
In più ci servono un paio di cosette nel codeBheind...
[System.Web.Services.WebMethod]
public static string DoMore(string valueText)
{
return "Simple Test";
}
Rimane valida la GetCompletionList ( documentata qualche post fa.. )
[System.Web.Services.WebMethod]
public static string[] GetCompletionList(String prefixText, int count)
{
List suggetions = GetData(prefixText, count);
return suggetions.ToArray();
}
private static List GetSuggestions(string key, int count)
{
List suggestions = new List();
for (int i = 0; i < count; i++)
{
// la vostra logica di estrazione...
}
return suggestions;
}
E nella pagina .. ci servono queste due function ( nel aspx )
function ItemForSplit(source, eventArgs)
{
Value = eventArgs.get_value();
var rs = document.getElementById('txtrSearch');
var dm = document.getElementById('txtDemo');
rs.value = "";
PageMethods.DoMore(Value,OnCallComplete,null,dm);
}
function OnCallComplete(result,txtOutput,methodName)
{
txtOutput.value = result;
}
Questi scrip devono essere MESSI NEL BODY .. e non nella header .. se non no va... by Design...
Che cosa ottenete ???
che il Client richiede al Server i dati la prima volta con GetCompletionList, li usa e richiede per la seconda volta
i nuovi dati al Server...
Funziona che è una meraviglia..
Nessun commento:
Posta un commento