46 messaggi dal 12 febbraio 2016
Ciao a tutti, vorrei creare un metodo con tre parametri stringa (titolo, descrizione e foto) per impostare dinamicamente i HtmlMeta delle pagine di un sito web.

Ecco il metodo che ho scritto:
public static void SetHtmlMeta(string titolo, string descrizione, string foto)
        {

            //Add description Meta Tag
            System.Web.UI.HtmlControls.HtmlMeta description = new System.Web.UI.HtmlControls.HtmlMeta();
            description.HttpEquiv = "description";
            description.Name = "description";
            description.Content = descrizione;

        }


Questo metodo l'ho scritto in una classe chiamata Utility.
Come faccio ad impostare ora l'htmlmeta nella pagina?
Normalmente in una pagina web dovrei fare così:

this.Page.Header.Controls.Add(description);

ma io questo metodo lo tengo in una classe esterna.
Io vorrei richiamare questo metodo dalle pagine così (nel load):
MySite.Utility.SetHtmlMeta("tiolo pagina", "descrizione della pagina", "eventuale foto della pagina");
129 messaggi dal 09 febbraio 2017
Dovresti passare in qualche modo i parametri della funzione e fare un metodo anche nella classe a cui vuoi passare, credo tu faccia prima a farlo interno.
Forse ci sono altre strade ma al momento , a me, non vengono in mente

Emanuel Pirovano
Web Developer
46 messaggi dal 12 febbraio 2016
Ti ringrazio Emanuel,
potresti farmi un piccolo esempio?
Io vorrei tenere il metodo nella mia classe esterna in maniera da poterlo utilizzare più comodamente in tutte le pagine del sito.
Grazie
10.246 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Normalmente in una pagina web dovrei fare così:
this.Page.Header.Controls.Add(description);


Prova in quest'altro modo:

(HttpContext.Current.Handler as Page).Header.Controls.Add(description);


Comunque sono d'accordo con Emanuel: il riferimento alla pagina dovrebbe essere passato anch'esso come argomento del metodo SetHtmlMeta, allo stesso modo in cui stai passando gli altri valori "titolo pagina", "descrizione della pagina" e "eventuale foto della pagina".
public static void SetHtmlMeta(Page page, string titolo, string descrizione, string foto)
{
  //Add description Meta Tag
  System.Web.UI.HtmlControls.HtmlMeta description = new System.Web.UI.HtmlControls.HtmlMeta();
  description.HttpEquiv = "description";
  description.Name = "description";
  description.Content = descrizione;
  page.Header.Controls.Add(description);
}

e lo richiami così:
MySite.Utility.SetHtmlMeta(Page, "titolo pagina", "descrizione della pagina", "eventuale foto della pagina");


A questo punto, potresti renderlo ancora più elegante facendo in modo che SetHtmlMeta diventi un extension method. Ci vuole poco, del resto è già un metodo statico. Fai in modo che Utility sia anch'essa una classe statica e aggiungi il this al parametro Page, così:
public static class Utility {
  public static void SetHtmlMeta(this Page page, string titolo, string descrizione, string foto)
  {
    //Add description Meta Tag
    System.Web.UI.HtmlControls.HtmlMeta description = new System.Web.UI.HtmlControls.HtmlMeta();
    description.HttpEquiv = "description";
    description.Name = "description";
    description.Content = descrizione;
    page.Header.Controls.Add(description);
  }
}

Fatto questo, lo puoi usare così:
Page.SetHtmlMeta("titolo pagina", "descrizione della pagina", "eventuale foto della pagina");

Fico, no?

Moreno
Modificato da BrightSoul il 17 giugno 2017 18.12 -

Enjoy learning and just keep making
46 messaggi dal 12 febbraio 2016
Buongiorno Moreno,
ho provato a seguire il tuo ultimo consiglio e funziona perfettamente. Solo che aggiunge il meta a fine pagine, dopo la chiusura del tag HTML. Come posso inserirlo nel posto corretto?
Ciao e grazie
10.246 messaggi dal 09 febbraio 2002
Contributi
Ciao,


dopo la chiusura del tag HTML.

uhm, questo è strano. Sicuro che il responsabile non sia qualche altro esperimento fatto in precedenza?
Il fatto che si tratti di un extension method non ha alcun effetto sulla posizione del tag. Assicurati di aver messo l'invocazione a SetHtmlMeta in un punto opportuno, tipo nel Page_Load.

Comunque, se la tua è un'applicazione ASP.NET 4 o superiore, prova ad usare la prorpietà MetaDescription:
public static void SetHtmlMeta(Page page, string titolo, string descrizione, string foto)
{
  //Set description
  page.MetaDescription = description;
}


ciao,
Moreno

Enjoy learning and just keep making
46 messaggi dal 12 febbraio 2016
Si esattamente c'era un errore di scrittura precedente.
Ti ringrazio tantissimo Moreno,
buona giornata!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.