=======================================================================
A continuacion les presento 3 formas distintas que en mi experiencia me han funcionado y espero igual les sea util a quellos que lean esto.
Cualquier duda o no funcionalidad agradezco informarme, tal vezos pudiera haber obviado algun detalle y asi poder corregirlo. Gracias Amigos y Saludos !!
Partamos de lo siguiente:
supongamos que contamos con un MasterPage lamado "MyMainMaster.master", es bien simple pues solo buscamos enfocar la funcioanalidad.
tendremos los archivos a los cuales nos referiremos como Originales asi de la sigueinte manera:
------------------------------ MyMainMaster.cs --------------------------------
- Código: Seleccionar todo
public partial class MyMainMaster : System.Web.UI.MasterPage{
protected void page_Load(object sender, EventArgs e)
{
}
}
-------------------------------------------------------------------------------
---------------------------- MyMainMaster.master ------------------------------
- Código: Seleccionar todo
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MyMainMaster.master.cs" Inherits="MyMainMaster" %>
<!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>Ejemplos de Como acceder las propiedades de los objetos en un Masterpage</title>
</head>
<body>
varh1 : <h1 id="varh1" runat="server">Texto por defecto</h1>
<form id="form1" runat="server">
<div>
label1: <asp:Label id="label1" text="" runat="server"></asp:Label>
</div>
<div>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
</body>
-------------------------------------------------------------------------------
Solo les muestro la parte de codigo que se vera afectada,obviamente pudieran existir otros fragmentos de codigos en sus archivos al momeno de desarrollar y poner en practica esto, solo lo menciono para que lo tengan presente.
Forma 1:
------------------------------ MyMainMaster.cs --------------------------------
- Código: Seleccionar todo
public partial class MyMainMaster : System.Web.UI.MasterPage{
private string m_varh1;
private string m_label1;
public string valuevarh1
{
get
{
return m_varh1;
}
set
{
m_varh1 = value;
varh1.InnerText = value;
}
}
public string valuelabel1
{
get
{
return m_label1;
}
set
{
m_label1 = value;
label1.InnerText = value;
}
}
protected void page_Load(object sender, EventArgs e)
{
}
}
-------------------------------------------------------------------------------
Puede agregrar una (no ambas) de las siguioentes directivas despues de la directiva <@Page...>
estas directivas mas que todo crean el ambito para la variables de clase de la clase Master que se especifique
<%@ MasterType TypeName="MyMainMaster" %>
<%@ MasterType VirtualPath="~/MyMainMaster.master" %>
---------------------------- test.aspx ------------------------------
- Código: Seleccionar todo
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" ErrorPage="Errors45.aspx" Inherits="test" MasterPageFile="~/MyMainMaster.master" %>
<%@ MasterType TypeName="MyMainMaster" %>
<asp:Content runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
</asp:Content>
-------------------------------------------------------------------------------
esto nos ayudara para poder acceder a la variable en código asi:
---------------------------- test.aspx.cs ------------------------------
- Código: Seleccionar todo
...
protected void Page_Load(object sender, EventArgs e)
{
this.Master.valuelabel1 = "Label1 alterado desde test.aspx";
this.Master.valuevarh1 = "varh1 alterado desde test.aspx";
}
...
-------------------------------------------------------------------------------
Forma 2:
mantenemos el archivo MyMainMaster.cs igual que en la forma 1
en lugar de agregar directivas en el archivo test.aspx :
<%@ MasterType TypeName="MyMainMaster" %> o <%@ MasterType VirtualPath="~/MyMainMaster.master" %>
(ojo las directivas no se agregan hago mención para que se entienda y note la diferencia frente a la forma 1 )
utilizamos el casting asi:
---------------------------- test.aspx.cs ------------------------------
- Código: Seleccionar todo
...
protected void Page_Load(object sender, EventArgs e)
{
(("MyMainMaster")this.Master).valuelabel1 = "Label1 alterado desde test.aspx";
(("MyMainMaster")this.Master).valuevarh1 = "varh1 alterado desde test.aspx";
}
...
-------------------------------------------------------------------------------
Forma 3:
usando los archivos en su estado inicial (los originales)
Obtendremos los valores del MyMainMaster asi:
---------------------------- test.aspx.cs ------------------------------
- Código: Seleccionar todo
...
protected void Page_Load(object sender, EventArgs e)
{
Label l1= new Label();
l1 = (Label)Master.FindControl("label1");
if (l1 != null)
l1.Text = "labe1 alterado desde test.aspx";
HtmlGenericControl h1valor = new HtmlGenericControl();
h1valor = (HtmlGenericControl)Master.FindControl("varh1");
h1valor.InnerText = "varh1 alterado desde test.aspx";
}
...
-------------------------------------------------------------------------------






