Resumé

AjaxControlToolkit ClientSide vs ScriptReferences

Cristian Merighi () 0,00

Come essere sicuri di referenziare tutte le librerie necessarie all'utilizzo meramente client (javascript) del toolkit?
Questo articolo è da considerarsi obsoleto. Alcune funzionalità potrebbero non essere più disponibili e non è possibile aggiungere commenti.

Vi siete già trovati davanti alla necessità di dover utilizzare i controlli dell'AjaxControlToolkit (o vostri componenti implementati su tale framework Ajax) in maniera puramente client (direttamente via javascript)?
Sarete sicuramente ricorsi alla seguente - errata - maniera di incapsulare nello ScriptManager(Proxy) le necessarie ScriptReferences.

WRONG WAY:

<asp:ScriptManager runat="server" ID="sm">

    <Scripts>

        <asp:ScriptReference Assembly="AjaxControlToolkit"

        Name="AjaxControlToolkit.Compat.Timer.Timer.js" />

        <asp:ScriptReference Assembly="AjaxControlToolkit"

        Name="AjaxControlToolkit.CollapsiblePanel.CollapsiblePanelBehavior.js" />

    </Scripts>

</asp:ScriptManager>

Tale strada è sbagliata e lo è per un paio di motivi.
Diamo un'occhiata agli attributi che decorano la classe AjaxControlToolkit.CollapsiblePanelExtender:

[Designer("AjaxControlToolkit.CollapsiblePanelDesigner, AjaxControlToolkit")]

[ClientScriptResource("AjaxControlToolkit.CollapsiblePanelBehavior", "AjaxControlToolkit.CollapsiblePanel.CollapsiblePanelBehavior.js")]

[RequiredScript(typeof(CommonToolkitScripts))]

[RequiredScript(typeof(AnimationScripts))]

[TargetControlType(typeof(Panel))]

[DefaultProperty("CollapseControlID")]

[System.Drawing.ToolboxBitmap(typeof(CollapsiblePanelExtender), "CollapsiblePanel.CollapsiblePanel.ico")]

public class CollapsiblePanelExtender : ExtenderControlBase

  1. Come potete intuire, affinché il componente client AjaxControlToolkit.CollapsiblePanelBehavior possa girare, non basta referenziare il solo file AjaxControlToolkit.CollapsiblePanel.CollapsiblePanelBehavior.js (incapsulato nell'assembly AjaxControlToolkit), ma anche un altro paio di librerie condivise (evidenziate sopra)!
  2. In seconda battuta ci accorgerèmmo di come - qualora volessimo come nel nostro caso istanziare oggetti di tipo Sys.Timer - la libreria di riferimento per il Timer è anche alla base degli scripts di Animation (evidenziati).

Ci stiamo ponendo quindi nella scomoda situazione di dover conoscere a fondo informazioni delle quali non dovrebbe importarci nulla!

Ecco perché esiste una corretta maniera per ottenere ciò che stiamo cercando...

RIGHT WAY:

var scriptRefs =

    AjaxControlToolkit.ScriptObjectBuilder.GetScriptReferences(typeof(AjaxControlToolkit.TimerScript))

    .Union(AjaxControlToolkit.ScriptObjectBuilder.GetScriptReferences(typeof(AjaxControlToolkit.CollapsiblePanelExtender)))

    .ToList();

scriptRefs.ForEach(sr => ScriptManager1.Scripts.Add(sr));

Spero sia d'aiuto.

Take care. Bye.

feedback
 

Syndicate

Autore

Cristian Merighi facebook twitter google+ youtube

Ultimi articoli

Top rated

Archivio

Dove sono?

Autore

Cristian Merighi facebook twitter google+ youtube

Le mie letture

Feeds