none
Como invocar um WebForm com <Tipo Generic>? RRS feed

  • Pergunta

  • No Windows Forms, eu criei um formulário desta forma:

       public partial class MeuWindowsForm <T>: Form
        {
         ...
    
        }

    E invoco desta maneira:

        MeuWindowsForm<MinhaClasse> meuWindowsForm = new MeuWindowsForm<MinhaClasse>();
    
        meuWindowsForm.ShowDialog();

    No Windows Form funciona normalmente, mas como faço o equivalente em WebForm?

    Eu criei um formulário WebFom desta maneira:

    public partial class MeuWebForm <T>: System.Web.UI.Page

    { ... }

    Tentei invocar desta maneira:

                MeuWebForm<MinhaClasse> meuWebForm = new MeuWebForm<MinhaClasse>();
    
                meuWebForm.Response.Redirect("MeuWebForm.aspx");
    Mas dá erro na segunda linha:

    "Response is not available in this context."

    Tentei também:

    meuWebForm.Server.Transfer("MeuWebForm.aspx");

    E dá a mensagem:
    "Error executing child request for MeuWebForm.aspx."

    Kiyoshi Kobayashi


    quinta-feira, 8 de março de 2012 18:35

Respostas

  • Olá Kiyoshi,

    Enquanto a página não for executado o método PreInit da página o contexto dela não existe e não será possível fazer o Response.

    Neste caso, se vc estiver executando este código dentro de uma página, vc deve apenas fazer:

    MeuWebForm<MinhaClasse> meuWebForm = new MeuWebForm<MinhaClasse>();
    
    Response.Redirect("MeuWebForm.aspx");

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    • Marcado como Resposta Harley Araujo segunda-feira, 12 de março de 2012 13:23
    sexta-feira, 9 de março de 2012 00:44
  • Não sei o que exatamente você está tentando fazer, mas talvez essa seja a solução:

    Crie uma classe que herde de System.Web.UI.Page assim:

    using System;
    using System.Collections.Generic;
    using System.Web;
    
    public class PaginaPai<T> : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("Teste");
        }
    }

    Dai para cada página você pode herdar este tipo passando o tipo genérico assim:

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class _Default : PaginaPai<ClasseTeste>
    {
    
    }

    Dai para cada classe que você for passar como genérico você cria uma página diferente. Porque eu acho que você não vai conseguir invocar o formulário da forma que você está tentando.

    Não sei se deu para entender, qualquer coisa só perguntar. Dá uma olhada no código do projeto:

    http://db.tt/BrJcEjnn

    Se achar outra solução por favor poste, para que agente aprenda tb ;)


    http://samuelcazelli.blogspot.com/


    • Editado Samuel_Cazelli sexta-feira, 9 de março de 2012 11:21
    • Sugerido como Resposta Samuel_Cazelli sexta-feira, 9 de março de 2012 19:22
    • Marcado como Resposta Harley Araujo segunda-feira, 12 de março de 2012 13:23
    sexta-feira, 9 de março de 2012 11:20

Todas as Respostas

  • Olá Kiyoshi,

    Enquanto a página não for executado o método PreInit da página o contexto dela não existe e não será possível fazer o Response.

    Neste caso, se vc estiver executando este código dentro de uma página, vc deve apenas fazer:

    MeuWebForm<MinhaClasse> meuWebForm = new MeuWebForm<MinhaClasse>();
    
    Response.Redirect("MeuWebForm.aspx");

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique

    • Marcado como Resposta Harley Araujo segunda-feira, 12 de março de 2012 13:23
    sexta-feira, 9 de março de 2012 00:44
  • Não sei o que exatamente você está tentando fazer, mas talvez essa seja a solução:

    Crie uma classe que herde de System.Web.UI.Page assim:

    using System;
    using System.Collections.Generic;
    using System.Web;
    
    public class PaginaPai<T> : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("Teste");
        }
    }

    Dai para cada página você pode herdar este tipo passando o tipo genérico assim:

    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class _Default : PaginaPai<ClasseTeste>
    {
    
    }

    Dai para cada classe que você for passar como genérico você cria uma página diferente. Porque eu acho que você não vai conseguir invocar o formulário da forma que você está tentando.

    Não sei se deu para entender, qualquer coisa só perguntar. Dá uma olhada no código do projeto:

    http://db.tt/BrJcEjnn

    Se achar outra solução por favor poste, para que agente aprenda tb ;)


    http://samuelcazelli.blogspot.com/


    • Editado Samuel_Cazelli sexta-feira, 9 de março de 2012 11:21
    • Sugerido como Resposta Samuel_Cazelli sexta-feira, 9 de março de 2012 19:22
    • Marcado como Resposta Harley Araujo segunda-feira, 12 de março de 2012 13:23
    sexta-feira, 9 de março de 2012 11:20