Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu gostaria que de acordo com a opção selecionada no combo na pagina Default.aspx, fosse carregada uma masterpage diferente na pagina Default2.aspx.
Esta dando erro: "Referência de objeto não definida para uma instância de um objeto. " na linha
pagina.MasterPageFile="MasterBlue.master"
da classe BaseMaster.
Segue o codigo das paginas, conto com a ajuda de voces.
Default.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem Value="TE">Teste</asp:ListItem>
<asp:ListItem Value="DV">Teste2</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="OK" />
</div>
</form>
</body>
</html>
Default.aspx.vb
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Response.Redirect(String.Format("Default2.aspx?parceiro={0}", Server.UrlEncode(DropDownList1.SelectedValue)))
End Sub
End Class
Classe BaseMaster.vb
Imports Microsoft.VisualBasic
Public Class BaseMaster
Inherits MasterPage
Public Sub SelecionaMaster(ByRef pagina As MasterPage, ByVal parceiro As String)
If parceiro = "DV" Then
pagina.MasterPageFile = "MasterBlue.master"
Else
pagina.MasterPageFile = "MasterGreen.master"
End If
End Sub
End Class
Default2.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %>
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
pagina 2</div>
</form>
</body>
</html>
Default2.aspx.vb
Partial Class Default2
Inherits System.Web.UI.Page
Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
Dim x As New BaseMaster()
x.SelecionaMaster(Me.Master, Request("Parceiro"))
End Sub
End Class
>
Para altera a MasterPage Dinamicamente você tem que criar um metodo para sobrescrever (em C#) o metodo Page_PreInit exemplo?
private void Page_PreInit(object sender, EventArgs e)
{
this.MasterPageFile = "NomeDaMaster.master"
}
Só que eu tenho que fazer através da função da classe pois tenho varias paginas onde terei que alterar isso, dessa forma eu teria que atribuir uma masterpage para cada página, não ficaria dinâmico.
As páginas não terão masterpage nenhuma, ao selecionar o combo de acordo com a opçao é que deve ser carregada ou uma ou outra masterpage.
Grata
Default2.aspx.vb
Partial Class Default2
Inherits System.Web.UI.Page
Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
Dim x As New BaseMaster()
x.SelecionaMaster(Me.Master, Request("Parceiro"))
End Sub
End Class
Ai não vai dar certo, pois se tentar adicionar master page a uma pagina sem master ira duplicar os cabeçalhos html, head, title, etc.
O ideal é todas as paginas herdarem uma master generica, dai você altera dinamicamente. ou ao inves de usar páginas, use as paginas como webusercontrol e va carregandos eles dinamicamente.
Para altera a MasterPage Dinamicamente você tem que criar um metodo para sobrescrever (em C#) o metodo Page_PreInit exemplo?
private void Page_PreInit(object sender, EventArgs e)
{
this.MasterPageFile = "NomeDaMaster.master"
}