Cómo acceder .Neto de los elementos de la página Maestra de una página de Contenido?
Pregunta
Es posible acceder a un elemento en una página principal de la página cargada en el ContentPlaceHolder
para el maestro?
Tengo un ListView que las listas de nombres de personas en un área de navegación de la página principal.Me gustaría actualizar el ListView después de que una persona ha sido añadido a la tabla que el control está enlazado a datos en.El ListView
actualmente no actualizar sus valores hasta que la caché se vuelve a cargar.Hemos encontrado que acaba de volver a ejecutar el ListView.DataBind()
va a actualizar un listview del contenido.No hemos sido capaces de ejecutar el ListView.DataBind()
en una página que utiliza la página principal.
A continuación se muestra un ejemplo de lo que yo quería hacer, pero un error del compilador dice
"PeopleListView no existe en el contexto actual"
SIG.master - Donde reside ListView
...<asp:ListView ID="PeopleListView"...
GISInput_People.aspx - Usos de los SIG.maestro como maestro de la página
GISInput_People.aspx.cs
AddNewPerson()
{
// Add person to table
....
// Update Person List
PeopleListView.DataBind();
...
}
¿Cuál sería la mejor manera de resolver un problema como este en C# .Neta?
Solución
Creo que podría hacer esto mediante el uso de este.Maestro.FindControl o algo similar, pero probablemente no debería - se requiere de la página de contenido para saber demasiado acerca de la estructura de la página principal.
Me gustaría sugerir otro método, como el disparo de un evento en el área de contenido que el maestro puede escuchar y re-unen cuando se cuece.
Otros consejos
Suponiendo que el control se llama "PeopleListView" en la página maestra
ListView peopleListView = (ListView)this.Master.FindControl("PeopleListView");
peopleListView.DataSource = [whatever];
peopleListView.DataBind();
Pero @palmsey es el más correcto, especialmente si su página podría tener la posibilidad de más de una página maestra.Separar y utilizar un evento.
Opción 1 :puede crear público de la propiedad de la página maestra de control de
public TextBox PropMasterTextBox1
{
get { return txtMasterBox1; }
set { txtMasterBox1 = value; }
}
el acceso es en el contenido de la página como
Master.PropMasterTextBox1.Text="SomeString";
Opción 2:en la página principal:
public string SetMasterTextBox1Text
{
get { return txtMasterBox1.Text; }
set { txtMasterBox1.Text = value; }
}
en el Contenido de la Página:
Master.SetMasterTextBox1Text="someText";
opción 3 :usted puede crear algún método público que trabaja para usted
este enfoque no es tan útil, pero es de ayuda si sólo desea utilizar algunos limitada y de control definidos
Uno creo recordar es la siguiente ASP.NET directiva.
<%@ MasterType attribute="value" [attribute="value"...] %>
Esto le ayudará cuando se hace referencia a esto.Maestro mediante la creación de un establecimiento inflexible de tipos de referencia a la página principal.Usted puede, a continuación, haga referencia a su ListView sin necesidad de emitir.
se puede acceder con el código de este.Maestro.FindControl(ControlID) el control que usted desea.Devuelve la referencia del control, de manera que los cambios sean efectivos.sobre la despedida de un evento no podría ser posible de cada situación.
Suponiendo que la página maestra fue nombrado MyMaster:
(Master as MyMaster).PeopleListView.DataBind();
Editar: desde PeopleListView será declarada por defecto, será necesario cambiar este público, o crear una propiedad pública de contenedor, de modo que puede acceder desde su página.