Pregunta

Tengo el requisito de construir un informe de presupuesto que tenga los mismos campos clave para 6 categorías diferentes. He escrito una parte web visual que extrae un listitem para cada sección y muestra los datos junto con un botón de edición. También hay una propiedad personalizada en la parte web para almacenar el tipo de presupuesto:

 public class ProjectDetailsView : WebPart
    {
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.
        private const string _ascxPath = @"~/_CONTROLTEMPLATES/SpecialProjectsProjectList/ProjectDetailsView/ProjectDetailsViewUserControl.ascx";

        [Personalizable(), WebBrowsable]
        public String BudgetType { get; set; }

        protected override void CreateChildControls()
        {
            ProjectDetailsViewUserControl control = Page.LoadControl(_ascxPath) as ProjectDetailsViewUserControl;
            //Control control = Page.LoadControl(_ascxPath);
            if (control != null)
            {
                control.WebPart = this;
            }

            Controls.Add(control);
        }
    }
}

He agregado esta Wepart Visual 6 veces en la misma página. Parece que solo el primer control realmente está guardando la propiedad personalizada. ¿Es probable que sea un error en el código, o no puede tener la misma WebPart numerosas veces en la misma página?

No quiero pasar horas de depuración si alguien ya sabe que necesito crear un control por separado por sección. ¡Muchas gracias!

¿Fue útil?

Solución 2

Ahora he descubierto por qué no pude guardar las propiedades personalizadas en la GUI. Estaba cerrando el objeto web actual del spContext. Aparentemente, esto no debe hacerse como lo maneja el marco. Una vez que eliminé mi CransitE.Dispose () de mi finalmente en el control de usuario de WebPart, pude guardar correctamente las propiedades personalizadas.

Otros consejos

Si va a poner una parte web en una página varias veces, cada instancia de la parte web debe tener una identificación única. Aquí hay una muestra de algo que podría hacer:

control.ID = this.ID + "_ProjectDetailsControl";

Licenciado bajo: CC-BY-SA con atribución
scroll top