Tengo problemas para agregar dinámicamente controles dentro de un panel de actualización con devoluciones de elementos parciales. He leído muchos artículos sobre controles dinámicos y entiendo cómo agregarlos y mantenerlos con las devoluciones, pero la mayoría de esa información no se aplica y no funcionará para las devoluciones de datos parciales. No puedo encontrar ninguna información útil sobre cómo agregarlos y mantenerlos con UpdatePanels. Me gustaría hacer esto sin crear un servicio web si es posible. ¿Alguien tiene alguna idea o referencia a alguna información útil?Adición mediante programación de controles de usuario dentro de un UpdatePanel
Respuesta
Esto es, creo, uno de los escollos más comunes para los programadores de asp.net pero no es tan difícil hacerlo bien cuando sabes lo que está sucediendo (¡recuerda siempre tu estado de visualización!).
la siguiente pieza de código explica cómo se pueden hacer las cosas. Es una página simple donde un usuario puede hacer clic en un menú que activará una acción que agregará un control de usuario a la página dentro del panel de actualización.
(Este código es prestado from here, y tiene mucha más información con respecto a este tema)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SampleMenu1.aspx.cs" Inherits="SampleMenuPage1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Sample Menu</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Menu ID="Menu1" runat="server" OnMenuItemClick="Menu1_MenuItemClick">
<Items>
<asp:MenuItem Text="File">
<asp:MenuItem Text="Load Control1"></asp:MenuItem>
<asp:MenuItem Text="Load Control2"></asp:MenuItem>
<asp:MenuItem Text="Load Control3"></asp:MenuItem>
</asp:MenuItem>
</Items>
</asp:Menu>
<br />
<br />
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Menu1" />
</Triggers>
</asp:UpdatePanel>
</form>
</body>
</html>
y
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class PlainSampleMenuPage : System.Web.UI.Page
{
private const string BASE_PATH = "~/DynamicControlLoading/";
private string LastLoadedControl
{
get
{
return ViewState["LastLoaded"] as string;
}
set
{
ViewState["LastLoaded"] = value;
}
}
private void LoadUserControl()
{
string controlPath = LastLoadedControl;
if (!string.IsNullOrEmpty(controlPath))
{
PlaceHolder1.Controls.Clear();
UserControl uc = (UserControl)LoadControl(controlPath);
PlaceHolder1.Controls.Add(uc);
}
}
protected void Page_Load(object sender, EventArgs e)
{
LoadUserControl();
}
protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
{
MenuItem menu = e.Item;
string controlPath = string.Empty;
switch (menu.Text)
{
case "Load Control2":
controlPath = BASE_PATH + "SampleControl2.ascx";
break;
case "Load Control3":
controlPath = BASE_PATH + "SampleControl3.ascx";
break;
default:
controlPath = BASE_PATH + "SampleControl1.ascx";
break;
}
LastLoadedControl = controlPath;
LoadUserControl();
}
}
para el código subyacente.
Eso es básicamente. Puede ver claramente que viewstate se mantiene con LastLoadedControl mientras que los controles se agregan dinámicamente a la página (dentro del panel de actualización (en realidad dentro del placeHolder dentro del panel de actualización) cuando el usuario hace clic en un elemento de menú, que enviará un devolución de datos asincrónica con el servidor
Más información también se puede encontrar aquí:.
- http://aspnet.4guysfromrolla.com/articles/081402-1.aspx
- http://aspnet.4guysfromrolla.com/articles/082102-1.aspx
y por supuesto en the website that holds the example code que utilicé aquí.
Me encontré con el problema de utilizar el método mencionado anteriormente, LoadUserControl() se llama dos veces al manejar un evento. He leído a través de algunos otros artículos y me gustaría mostrar mi modificación:
1) Uso LoadViewState en lugar de Load para cargar el control de usuario:
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
if (!string.IsNullOrEmpty(CurrentUserControl))
LoadDataTypeEditorControl(CurrentUserControl, panelFVE);
}
2) No se olvide de establecer el Identificación de control al cargar el control de usuario:
private void LoadDataTypeEditorControl(string userControlName, Control containerControl)
{
using (UserControl myControl = (UserControl) LoadControl(userControlName))
{
containerControl.Controls.Clear();
string userControlID = userControlName.Split('.')[0];
myControl.ID = userControlID.Replace("/", "").Replace("~", "");
containerControl.Controls.Add(myControl);
}
this.CurrentUserControl = userControlName;
}
Prueba esto:
Literal literal = new Literal();
literal.Text = "<script type='text/javascript' src='http://www.googleadservices.com/pagead/conversion.js'>";
UpdatePanel1.ContentTemplateContainer.Controls.Add(literal);
puede REPLA ce el contenido de literal con cualquier contenido HTML que desee ...
- 1. Adición de controles dinámicamente a un UpdatePanel de ASP.NET AJAX
- 2. ¿Controles dinámicos creados dentro de UpdatePanel?
- 3. Adición de etiqueta a un cuadro de texto (mediante programación)
- 4. Creación mediante programación de controles en Cocoa
- 5. Agregar controles mediante programación al formulario WPF
- 6. Código de JavaScript dentro de UpdatePanel
- 7. Mostrar controles mediante programación en MPMoviePlayerController
- 8. Validadores de ASP.NET dentro de un UpdatePanel
- 9. Adición de permisos mediante programación a una carpeta
- 10. Login un usuario mediante programación a través de JAAS
- 11. Cómo agregar controles mediante programación a un formulario en VB.NET
- 12. Agregar un nuevo usuario de subversión mediante programación con C#
- 13. Controles en UpdatePanel Perdiendo eventos JQuery
- 14. Adición de un indicador de actividad mediante programación a una vista
- 15. ¿Puedo deshabilitar un panel de actualización mediante programación?
- 16. cargar un control de usuario mediante programación en un escritor de texto html
- 17. Adición de un acceso directo a una opción de menú del sistema agregado mediante programación
- 18. UpdateProgress vinculado a varios controles UpdatePanel
- 19. agregar información sobre herramientas a los controles creados mediante programación
- 20. Agregar controles dinámicamente a controles de usuario
- 21. ASP.Net - Javascript dentro de AJAX UpdatePanel
- 22. ¿Obtiene el UID y el GID mediante programación mediante un nombre de usuario en Unix?
- 23. FileUpload.PostedFile siempre nulo dentro de UpdatePanel
- 24. jquery ui datepicker dentro de asp.net UpdatePanel
- 25. Cerrar sesión usuario de Win XP mediante programación en C#
- 26. ¿Cómo puedo autenticar mediante programación a un usuario en Django?
- 27. controles secundarios son nulas cuando se carga control de usuario mediante programación a través de LoadControl (Tipo, objeto []) sobrecarga
- 28. Cambiar el usuario del servicio de Windows mediante programación
- 29. Cancelar mediante programación un flujo de trabajo de SharePoint
- 30. ¿Cómo hacer que UpdatePanel dentro de ListView funcione?
¿Puede publicar el código con el que intenta hacer esto? –