2008-09-24 4 views
0

j'ai un contrôle qui est organisé comme celui-ciLa meilleure façon d'enregistrer js pour la modularité dans le contrôle de l'utilisateur

alt text

et je veux avoir le javascript enregistré sur les pages maître d'appel, etc., de sorte que partout ce dossier de contrôle est abandonné puis enregistré, il saura comment trouver l'URL du js.

Voici ce que j'ai jusqu'à présent (dans le contrôle de l'utilisateur)

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!Page.IsClientScriptBlockRegistered("jqModal")) 
     Page.ClientScript.RegisterClientScriptInclude("jqModal", ResolveClientUrl("~js/jqModal.js")); 
    if (!Page.IsClientScriptBlockRegistered("jQuery")) 
     Page.ClientScript.RegisterClientScriptInclude("jQuery", ResolveClientUrl("~/js/jQuery.js")); 
    if (!Page.IsClientScriptBlockRegistered("tellAFriend")) 
     Page.ClientScript.RegisterClientScriptInclude("tellAFriend", ResolveClientUrl("js/tellAFriend.js")); 
} 

Toutes les idées?

Répondre

1

Vous pouvez utiliser une classe d'aide avec la méthode statique:

public static class PageHelper { 
    public static void RegisterClientScriptIfNeeded(Page page, string key, string url) { 
     if(false == page.IsClientScriptBlockRegistered(key)) { 
      page.ClientScript.RegisterClientScriptInclude(key , ResolveClientUrl(url)); 
     } 
    } 
} 

ou vous pouvez avoir une méthode d'instance similaire dans une classe de base pour la page/webcontrol/usercontrol, qui fera la même chose.

0

Je ne peux pas voir l'image que vous avez publiée.

Vous pouvez également utiliser Context.Items pour vous assurer que l'élément n'est ajouté qu'une seule fois par requête et rendre le javascript via le contrôle lui-même, même si je pense que le script registerclient est également très bien.

protected override void Render(HtmlTextWriter writer) 
    { 
     base.Render(writer); 
     string[] items = new string[] { "jqModal", "jQuery", "tellAFriend" }; 
     //Check if the Script has already been rendered during this request. 
     foreach(string jsFile in items) 
     {   
      if (!Context.Items.Contain(sjsFile)) 
      { 
       //Specify that the Script has been rendered during this request. 
       Context.Items.Add(jsFile,true); 
       //Write the script to the page via the control 
       writer.Write(string.Format(SCRIPTTAG, ResolveUrl(jsFile))); 
      } 
     } 
    } 
Questions connexes