Pregunta

Actualmente estoy generando UserControls como sigue en una clase base abstracta para que estén disponibles para otras páginas que implementan la clase 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;
}

Lo que me está molestando acerca de este código es que puedo crear una instancia de TopStrapline con el LinqToXML pero no es bueno como un control de usuario, ya que necesito para cargar el control de usuario con LoadControl. Esto funciona, pero parece un poco torpe. Lo ideal sería que pudiera ejecutar LoadControl directamente en el objeto anónimo pageControls, y luego asignar que el control de carga en la propiedad de la página.

¿Es esto posible? ¿Puede alguien sugerir una mejor solución a este problema? Gracias

¿Fue útil?

Solución

Que este trabajo para usted?

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

      return control;
  }).FirstOrDefault();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top