c# - una - masterpage asp
¿Cómo acceder al elemento.Net en la página maestra desde una página de contenido? (6)
¿Es posible acceder a un elemento en una página maestra desde la página cargada dentro de ContentPlaceHolder
para el maestro?
Tengo un ListView que enumera los nombres de las personas en un área de navegación en la página Maestra. Me gustaría actualizar el ListView después de que se haya agregado una persona a la tabla a la que ListView está vinculado a los datos. El ListView
actualmente no actualiza sus valores hasta que se vuelva a cargar el caché. Hemos encontrado que simplemente volver a ejecutar ListView.DataBind()
actualizará el contenido de una lista de vista. No hemos podido ejecutar ListView.DataBind()
en una página que usa la página Maestra.
A continuación se muestra una muestra de lo que quería hacer, pero un error de compilación dice
"PeopleListView no existe en el contexto actual"
GIS.master: donde reside ListView
...<asp:ListView ID="PeopleListView"...
GISInput_People.aspx - Utiliza GIS.master como página maestra
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 # .Net?
Creo que podrías hacer esto usando this.Master.FindControl o algo similar, pero probablemente no deberías: requiere que la página de contenido sepa demasiado sobre la estructura de la página maestra.
Sugeriría otro método, como disparar un evento en el área de contenido que el maestro podría escuchar y volver a unir cuando se dispare.
Suponiendo que tu página maestra se llamara MyMaster:
(Master as MyMaster).PeopleListView.DataBind();
Editar: dado que PeopleListView se declarará protegido de manera predeterminada, deberá cambiarlo a público o crear un contenedor de propiedades públicas para que pueda acceder a él desde su página.
Uno piensa recordar es la siguiente directiva ASP.NET.
<%@ MasterType attribute="value" [attribute="value"...] %>
Le ayudará cuando haga referencia a esto. Máster al crear una referencia fuertemente tipada a la página maestra. A continuación, puede hacer referencia a su ListView sin necesidad de CAST.
puede acceder con el código this.Master.FindControl (ControlID) que control desea. Devuelve la referencia del control, para que los cambios sean efectivos. acerca de disparar un evento no podría ser posible en cada situación.
Opción 1: puede crear propiedad pública de su control de página maestra
public TextBox PropMasterTextBox1
{
get { return txtMasterBox1; }
set { txtMasterBox1 = value; }
}
acceder a ella en la página de contenido como
Master.PropMasterTextBox1.Text="SomeString";
Opción 2: en la página maestra:
public string SetMasterTextBox1Text
{
get { return txtMasterBox1.Text; }
set { txtMasterBox1.Text = value; }
}
en la página de contenido:
Master.SetMasterTextBox1Text="someText";
opción 3: puede crear algún método público que funcione para usted
este enfoque no es tan útil, pero ayuda si solo quieres usar un control limitado y predefinido
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 más correcto, especialmente si su página podría tener la posibilidad de tener más de una página maestra. Desacoplarlos y usar un evento.