none
Determinar o ASPX de uma classe estaticamente RRS feed

  • Pergunta

  • Bom dia, eu tenho uma classe que deriva de uma Page (que consequentemente tem um arquivo ASPX que a descreve).

    Eu quero, estaticamente, determinar qual é o arquivo ASPX referente a classe. A exemplo, eu preciso que esse cenário funcione:

    ASPX

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="CWEB.Web.UI.DefaultPage" %>
    <!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 id="main_head" runat="server">
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <title>My Page</title>
    </head>
    <body id="login_body">
        <form id="main_login" class="main_login" runat="server">
            <div class="container" id="openpage">
                <div class="logo"><img src="content/images/logo.png" alt="Logo" /></div>
                <asp:Button ID="tologin" runat="server" Text="Login" />
            </div>
        </form>
    </body>
    </html>

    C#

    namespace CWEB.Web.UI
    {
        public class DefaultPage : global::System.Web.UI.Page
        {
            protected SysWUI.HtmlControls.HtmlHead main_head;
            protected SysWUI.HtmlControls.HtmlForm main_login;
            protected SysWUI.WebControls.Button tologin;
            protected SysWUI.WebControls.Button todownloads;
            protected SysWUI.WebControls.Button topanel;
    
            public static string VPath()
            {
                return ""; //AQUI!
            }
        }
    }

    A função estática "VPath()" deveria retornar "~/contet/default.aspx". Já me disseram que dá para fazer com a página carregada, isso eu sei - mas preciso que a classe me passe o endereço SEM QUE ELA ESTEJA CARREGADA. Isso porque vou chamar em outra função para chamar no "Response.Redirect(string)".

    Esse é o Objetivo:

    namespace CWEB.Web
    {
        public class OtherPage : global::System.Web.UI.Page
        {
            protected SysWUI.HtmlControls.HtmlHead main_head;
            protected SysWUI.HtmlControls.HtmlForm main_login;
            protected global::System.Web.UI.Button buttonGoLogin;
            private void buttonGoLogin_Click(object Sender, global::System.EventArgs e) { this.Response.Redirect(CWEB.Web.DefaultPage.VPath()); }
            private void Page_Load(object Sender, global::System.EventArgs e) { this.buttonGoLogin.Click += this.buttonGoLogin_Click; }
            public OtherPage() { this.Load += this.Page_Load; }
    
            ~OtherPage()
            {
                this.Load -= this.Page_Load;
                this.buttonGoLogin.Click -= this.buttonGoLogin_Click;
            }
        }
    }

    Como faço? Levando em conta que "OtherPage" tem um ASPX e o usuário chame "http://www.meudominio.com.br/otherpage.aspx", como esse cenário poderia ser verdadeiro?


    sexta-feira, 11 de setembro de 2015 13:53

Respostas

  • Não, desempenho acredito ser até melhor, já que uma constante é compilada seria até mais "rápido" apenas consultar a string do que determinar o caminho - meu objetivo era versatilidade. Imagine que o arquivo ASPX da classe "DefaultPage" está na pasta "content" com o nome "page.aspx" (como diz a constante do exemplo). Por "n" questões eu decidi mudar o nome do arquivo ou o nome da pasta ou mudar o arquivo de pasta e esqueci de trocar no código do programa a referência. Quando eu der "Response.Redirect()" ele vai para um endereço incorreto.
    • Marcado como Resposta Marcos SJ quinta-feira, 24 de setembro de 2015 12:51
    quinta-feira, 24 de setembro de 2015 11:41

Todas as Respostas

  • Olá SammuelMiranda,

    Tudo bem?

    Poderia somente explicar sobre o propósito desta necessidade em seu contexto?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 11 de setembro de 2015 19:57
  • Certamente,

    o usuário entrou em "http://meudominio.com.br/otherpage.aspx". Esse link, no meu exemplo, seria interpretado pela classe "CWEB.Web.OtherPage" ok?

    Agora, nessa classe existe um botão "buttonGoLogin", que faz um "Response.Redirect(string)" para "http://meudominio.com.br/default.aspx". Pois bem. Eu não quero digitar "~/default.aspx" como argumento do Redirect. Ao invés disso quero colocar "Response.Redirect(CWEB.Web.LoginPage.VPath())" no botão da classe "OtherPage" (que é a classe que está carregada).

    COMPLEMENTO

    Digamos assim, se eu não souber aonde está o ASPX referente a classe e quiser, de uma outra página, fazer um Redirect entre classes, o que eu deveria fazer?

    sábado, 12 de setembro de 2015 13:32
  • Olá SammuelMiranda,

    Tudo bem?

    Conseguiu encontrar uma solução para o seu problema?

    Atenciosamente


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 21 de setembro de 2015 20:00
  • Não, não encontrei em lugar algum nenhuma solução, e infelizmente vou ter que criar uma constante, classe a classe com o endereço do ASPX

    public class DefaultPage
    {
        public const string Path = "~/content/page.aspx";
    }
    
    //Assim eu posso
    
    public class OtherPage
    {
        public void Method() { this.Response.Redirect(DefaultPage.Path); }
    }
    Acho q vou fechar assim mesmo.

    quarta-feira, 23 de setembro de 2015 11:37
  • Entendi. Mas isso vai impactar no desempenho de sua aplicação de alguma maneira negativa?


    Marcos Roberto de Souza Junior

    Esse conteúdo e fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as respostas que resolveram o seu problema. Essa e uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta SammuelMiranda quinta-feira, 24 de setembro de 2015 11:41
    • Não Marcado como Resposta Marcos SJ quinta-feira, 24 de setembro de 2015 12:50
    quarta-feira, 23 de setembro de 2015 14:24
  • Não, desempenho acredito ser até melhor, já que uma constante é compilada seria até mais "rápido" apenas consultar a string do que determinar o caminho - meu objetivo era versatilidade. Imagine que o arquivo ASPX da classe "DefaultPage" está na pasta "content" com o nome "page.aspx" (como diz a constante do exemplo). Por "n" questões eu decidi mudar o nome do arquivo ou o nome da pasta ou mudar o arquivo de pasta e esqueci de trocar no código do programa a referência. Quando eu der "Response.Redirect()" ele vai para um endereço incorreto.
    • Marcado como Resposta Marcos SJ quinta-feira, 24 de setembro de 2015 12:51
    quinta-feira, 24 de setembro de 2015 11:41