none
Afficher un popup avec une webpart RRS feed

  • Question

  • Bonjour à tous, je commence à developper des webparts sous visual studio 2005 et je suis bloqué pour afficher un popup qui contient du texte généré au clic d'un linkbutton.
    J'ai essayé avec du javascript mais cela ne fonctionne pas, je ne vois pas comment insérer du script dans la balise head.

    Merci pour votre aide.

    Adrien
    mardi 29 avril 2008 07:22

Réponses

  • Bonjour,

     

    Pour injecter du script dans la balise head avec une webpart SharePoint il y a plusieurs façons de faire :

     

    - Récupérer le header et ajouter une balise script directement dedans :

    Code Snippet

     

    Page.Header.Controls.Add(new LiteralControl(@"<script>....</script>"));

     

     

    - Si votre javascript est dans un fichier, vous pouvez utiliser le contrôle ScriptLink, comme décrit ici : http://blogs.developpeur.org/anouvel/archive/2008/04/19/sharepoint-le-contr-le-scriptlink.aspx

     

     

    Toutefois, dans le cadre d'une webpart ayant besoin d'un fichier javascript, il est préférable de l'embedder dans les resources de l'assembly et d'utiliser la méthode Page.ClientScript.RegisterClientScriptResource() d'ASP.NET. Par contre, le bloc  <script> généré ne sera pas ajouté au header, il sera au milieu de la page.

     

     

    mardi 29 avril 2008 07:54

Toutes les réponses

  • Bonjour,

     

    Pour injecter du script dans la balise head avec une webpart SharePoint il y a plusieurs façons de faire :

     

    - Récupérer le header et ajouter une balise script directement dedans :

    Code Snippet

     

    Page.Header.Controls.Add(new LiteralControl(@"<script>....</script>"));

     

     

    - Si votre javascript est dans un fichier, vous pouvez utiliser le contrôle ScriptLink, comme décrit ici : http://blogs.developpeur.org/anouvel/archive/2008/04/19/sharepoint-le-contr-le-scriptlink.aspx

     

     

    Toutefois, dans le cadre d'une webpart ayant besoin d'un fichier javascript, il est préférable de l'embedder dans les resources de l'assembly et d'utiliser la méthode Page.ClientScript.RegisterClientScriptResource() d'ASP.NET. Par contre, le bloc  <script> généré ne sera pas ajouté au header, il sera au milieu de la page.

     

     

    mardi 29 avril 2008 07:54
  • Merci pour votre réponse rapide, le code

    Code Snippet

    Page.Header.Controls.Add(new LiteralControl(@"<script>....</script>"));



    je dois l'insérrer dans le onload de la page?
    mardi 29 avril 2008 08:04
  • Je vous en prie Smile

     

    Le PreRender convient mieux
    mardi 29 avril 2008 08:06
  • Cela fonctionne à la perfection merci
    mardi 29 avril 2008 08:17
  • J'ai parlé un peu trop vite, le code javascript a bien été insérré dans le head mais il n'est jamais lancé

    j'ai ce code :


    Code Snippet

    protected override void OnPreRender(EventArgs e)
            {
                Page.Header.Controls.Add(new LiteralControl(@"<script type='text/javascript'><!--function myPopup() {window.open( 'http://www.google.com/' )}//--></script>"));
            }



    et ce code pour le linkbutton

    protected override void CreateChildControls()
            {
                SPWeb mySite = SPControl.GetContextWeb(Context);
                SPList todList = mySite.Lists["tod"];
                int num = 0;

                foreach (SPListItem item in todList.Items)
                {
                    num += 1;
                    LinkButton myLink = new LinkButton();
                    Controls.Add(myLink);
                    myLink.Text = item["Title"].ToString();
                    myLink.OnClientClick = "BLOCKED SCRIPTmyPopup()";
                    //myLink.Click += new EventHandler(_submitBt_Click);
                }
              

            }



    mardi 29 avril 2008 08:25
  • J'ai voulu faire la seconde méthode, celle qui consiste à encapsuler mon script dans l'assembly.
    Donc je l'ai ajouté dans mon projet, dans build action j'ai choisi "embedded Ressource"
    puis dans AssemblyInfo.cs j'ai ajouté la ligne suivante:

    [assembly: WebResource("nameSpaceDeMaWebPart.monScript.js", "application/x-javascript")]


    puis dans mon PreRender j'ai écrit:

    this.Page.ClientScript.RegisterClientScriptResource(this.GetType(), "nameSpaceDeMaWebPart.monScript.js");

    Mais malheureusement pour moi ca ne fonctionne pas, dans le code source de ma page asp "monScript.js" n'est jamais appelé.

    mardi 29 avril 2008 13:26
  • L'identifiant de votre resource est probablement faux. Avec Reflector vous pouvez inspecter votre assembly afin de connaitre le bon identifiant pour votre embedded resource.

     

    Je ne pense pas que le problème vienne de là mais pour déclarer mes javascripts j'utilise habituellement le MIME type "text/javascript", et non "application/x-javascript".

     

     

    mardi 29 avril 2008 14:11