Kaolapso 0 Denunciar post Postado Maio 2, 2011 Pessoal, Criei um menu dentro de um componente webcontrol e debugando a página vi que ele é carregado logo após o Page_Load (até aí tranquilo). Só que depois do page load da minha página, tenho a rotina que valida o usuário e executa um novo select para carregar o menu de acordo com suas permissões, a questão é que não sei recarregar o menu depois disso. Tentei o comando Page_Load() do webcontrol mas não aconteceu nada. Alguém tem ideia de como resolver isso? Muito obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Maio 2, 2011 Faça o preenchimento do menu dentro do Page_load do controle que deve funcionar. Compartilhar este post Link para o post Compartilhar em outros sites
Kaolapso 0 Denunciar post Postado Maio 3, 2011 Faça o preenchimento do menu dentro do Page_load do controle que deve funcionar. Eu consegui fazer funcionar parcialmente, mesmo utilizando o webcontrol. Mas o componente perde as propriedades de estilo. Vou postar aqui para vocês poderem entender melhor: primeiro os dados do meu webcontrol, wucMenu.ascx: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="wucMenu.ascx.cs" Inherits="UsuControl.wucMenu" %> <asp:Menu ID="menu" DataSourceID="xmlDataSource" runat="server" BackColor="#006699" DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="10" style="text-align: left; margin-left :5px" ForeColor="#ffffff" StaticSubMenuIndent="10px" StaticDisplayLevels="1" Orientation = "Horizontal" Target ="ifrPrincipal" > <DataBindings> <asp:MenuItemBinding DataMember="MenuItem" NavigateUrlField="NavigateUrl" TextField="Text" ToolTipField="ToolTip" TargetField="Target" /> </DataBindings> <StaticSelectedStyle BackColor="#FFCC66" /> <StaticMenuItemStyle HorizontalPadding="65px" VerticalPadding="2px" /> <DynamicMenuStyle BackColor="#006699" /> <DynamicSelectedStyle BackColor="#FFCC66" /> <DynamicMenuItemStyle HorizontalPadding="65px" VerticalPadding="2px" /> <DynamicHoverStyle BackColor="#003366" Font-Bold="False" ForeColor="White"/> <StaticHoverStyle BackColor="#003366" Font-Bold="False" ForeColor="White" /> </asp:Menu> <asp:XmlDataSource ID="xmlDataSource" TransformFile="~/TransformXSLT.xsl" XPath="MenuItems/MenuItem" runat="server"/> wucMenu.ascx.cs: namespace UsuControl { public partial class wucMenu : System.Web.UI.UserControl { public void Page_Load(object sender, EventArgs e) { DataSet dsMenu = null; dsMenu = new DataSet(); Configuracao.Data.Menu wbMenu = null; if (Session.Count == 0) { wbMenu = new Configuracao.Data.Menu(2, "CAIO"); } else { wbMenu = new Configuracao.Data.Menu(Int32.Parse(Session["UsuarioCodigo"].ToString()), Session["UsuarioLogin"].ToString()); } dsMenu = wbMenu.criaMenu(); dsMenu.DataSetName = "Menus"; dsMenu.Tables[0].TableName = "Menu"; DataRelation relation = new DataRelation("ParentChild", dsMenu.Tables["Menu"].Columns["MNU_IDE"], dsMenu.Tables["Menu"].Columns["MNU_PAR_IDE"], true); relation.Nested = true; dsMenu.Relations.Add(relation); xmlDataSource.Data = dsMenu.GetXml(); } } } Tenho minha página inicial, chamada default.aspx <body>... <td align="center"> <div id="divMenu"> <uc1:wucMenu ID="wucMenu1" runat="server" /> </div> </td> Em default.aspx.cs tenho: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { wucMenu1.Visible = false; } } protected void btnLoginOK_Click(object sender, EventArgs e) { Codigo = dataUsuario.validarUsuario(modelUsuario); if (Codigo > 0) { dadosUsuario = Usuario.CarregaUsuario(Codigo); Session.Add("UsuarioCodigo", dadosUsuario.Codigo); Session.Add("UsuarioLogin", dadosUsuario.Sigla); Session.Add("UsuarioNome", dadosUsuario.NomeCompleto); Session.Add("UsuarioTipo", dadosUsuario.Tipo); Session.Add("UsuarioEmail", dadosUsuario.Email); wucMenu1.Page_Load(null, null); // aqui eu passo null, null porque não sei o que passar mas funcionou wucMenu1.Visible = true; updPagina.Update(); } } Quando eu clico no botão de login, a página faz tudo certo, porém, ao carregar o webcontrol com o menu que o usuário tem permissão ele não carrega os dados definidos no wucMenu.ascx. Existe alguma forma de preservar isso ou estou chamando o método errado (wucMenu1.Page_Load(null, null)) quando tenho as informações de usuário e preciso recarregar o menu? Obrigado a todos. Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Maio 3, 2011 Tenta passar: wucMenu1.Page_Load(sender, e); ou wucMenu1.DataBind(); Compartilhar este post Link para o post Compartilhar em outros sites
Kaolapso 0 Denunciar post Postado Maio 3, 2011 Obrigado Ivan, Tentei mas não funcionou. Eu não sei se uma alternativa seria só carregar o controle depois do click no botão de login mas não sei como fazer isso. Acho que teria que impedir o carregamento no Load da página e depois exibir ele no click do botão de login. Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Maio 3, 2011 Faz o debug e veja o por que não acontece conforme Você deseja, Compartilhar este post Link para o post Compartilhar em outros sites
Kaolapso 0 Denunciar post Postado Maio 3, 2011 Faz o debug e veja o por que não acontece conforme Você deseja, Eu debuguei mas ele não estra na parte "gráfica" do componente. Ele executa as consultas e retorna o XML que monta o menu corretamente, somente não traz visualmente correto, como acontece a primeira vez que ele carrega. Compartilhar este post Link para o post Compartilhar em outros sites