Cómo acceder .Neto de los elementos de la página Maestra de una página de Contenido?

StackOverflow https://stackoverflow.com/questions/6406

  •  08-06-2019
  •  | 
  •  

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?

¿Fue útil?

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"...] %>

Referencia de MSDN

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top