5 votes

Ajout de scripts au ScriptManager sur condition

J'ai un scénario délicat dans lequel je veux ajouter une référence de script de ScriptManager uniquement sous certaines conditions, comme suit

<asp:ScriptManagerProxy ID="scriptManagerProxy1" runat="server">
<CompositeScript>
    <Scripts>
        <asp:ScriptReference path=/...." />
    </Scripts>
</CompositeScript>
<asp:ScriptManagerProxy>

Je veux que ce script ne fasse référence qu'à une condition spécifique, j'ai donc procédé comme suit

<% if(xyzclass.property)
{ %>

above code

<% } %>

Une fois que j'ai fait cela, j'obtiens l'erreur suivante

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

J'ai cherché sur Google et j'ai essayé d'ajouter '#' comme <%# mais en ajoutant '#' il ne peut pas trouver la classe (xyzclass) et obtient donc l'erreur suivante

Expected class, delegate, enum, interface, or struct

J'ai également essayé de faire le travail mentionné ici http://leedumond.com/blog/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks/

Pas de chance pour l'instant. Si j'adopte l'approche mentionnée dans le lien ci-dessus, cela donne quelque chose comme

The base class includes the field '', but its type (System.Web.UI.ScriptManagerProxy) is not compatible with the type of control (System.Web.UI.ScriptManager).

Ce dont j'ai besoin, c'est d'ajouter des scripts via ScriptManager UNIQUEMENT de manière dynamique. Est-ce qu'il y a un moyen qui est en pratique bon aussi.

Merci d'avance,

Nimesh

8voto

Brian Mains Points 31772

Si vous souhaitez ajouter des scripts basés sur des conditions, ajoutez-les par programmation :

ScriptManager mgr = ScriptManager.GetCurrent(this.Page);
if (condition)
   mgr.Scripts.Add(new ScriptReference { Path = "~/script.js" });

dans le code derrière. Vous pouvez également utiliser un ScriptManagerProxy et les définir dans le contrôle utilisateur ou la page elle-même. C'est une excellente façon d'ajouter des scripts, mais si vous utilisez un scripts composite, il les ajoute au même scripts composite que le ScriptManager.

HTH.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X