Question

Actuellement, je suis générer UserControls comme suit dans une classe de base abstraite de sorte qu'ils sont disponibles pour toutes les autres pages qui mettent en œuvre la classe de base:

// doc is an XML file that may or may not contain a TopStrapline node
var pageControls = new {

           TopStrapline = (from strap in doc.Elements("TopStrapline")
                           select new TopStrapline
                                      {
                                          StraplineText =
                                              (string)strap.Attribute("text")
                                      }).FirstOrDefault(),

           // loads of other UserControls generated from other nodes
};

// if there's a StrapLine node, I want to make it available as a property 
// in this base class. Any page that needs a TopStrapline can just add the base 
// class's TopStrapline to a placeholder on the page.
if (pageControls.TopStrapline != null)
{
    this.TopStrapline = GetTopStrapline(pageControls.TopStrapline);
}

private TopStrapline GetTopStrapline(TopStrapline strapline)
{
    TopStrapline topStrapline = (TopStrapline)LoadControl("~/Path/TopStrapline.ascx");

    topStrapline.StraplineText = strapline.StraplineText;

    return topStrapline;
}

Qu'est-ce qui me casser les pieds sur ce code est que je peux créer une instance de TopStrapline avec le LinqToXML mais il est pas bon comme un contrôle utilisateur parce que je dois charger le UserControl avec LoadControl. Cela fonctionne, mais il semble un peu maladroit. Idéalement, je pouvais exécuter LoadControl directement dans le pageControls objet anonyme, puis attribuez-lui que le contrôle chargé dans la propriété de la page.

Est-ce possible? Quelqu'un peut-il suggérer une meilleure solution à ce problème? Merci

Était-ce utile?

La solution

Would ce travail pour vous?

this.TopStrapline = doc.Elements("TopStrapline")
  .Select(e => {
      var control = (TopStrapline)LoadControl("~/Path/TropStrapLine.ascx");
      control.StraplineText = e.Attribute("text");

      return control;
  }).FirstOrDefault();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top