none
Atlas

    Question

  • Estou utilizando a ultima versão disponibilizada do atlas em um projeto WEB.
     
    Esta dando tudo certo, adicionei um ScriptManager e um UpdatePanel, coloquei um GridView dentro do UpdatePanel e todos os eventos do GridView passaram a ser feitos sem a atualização completada da pagina.
     
    Mas customizei este grid com alguns script, preciso de executar um comando em C# atraves de um evento do javascript utilizando atlas, como posso fazer isto ?
    Monday, May 15, 2006 9:36 PM

Answers

  • Tuesday, May 16, 2006 7:43 PM
    Moderator
  • (fiz o exemplo em vermelho e preto em homenagem ao Atlético Paranaense, hehehe :-P )

    Então, veja só, na classe base vc cria a propriedade da GridView, ai eu defini dentro dela a geração de uma exception, apenas por motivo de controle.

    Na classe onde vc herda a classe base, vc reescreve a propriedade gView, que lá irá expor o seu controle de gridView definido.

    Acredito que o metodo assinado como Webmethod na classe base se tornará um PageMethod no Atlas.

    Sds,
    Diego

    public class
    SuaClassePageBaseComWebMethod : System.Web.UI.Page
    {
    public virtual gView
    {
       get { throw new Exception("Nao Implementado"); }
       set {
    throw new Exception("Nao Implementado");}
    }

    [WebMethod]
    public void MetodoBaseQueAcessaGridView()
    {
      gView.DataSource = ......
     /* qquer coida acessando GridView por gView*/
    }
    }

    public class suapagina_aspx : SuaClassePageBaseComWebMethod
    {
     private GridView gv;
     public override gView
    {
       get {return gv;}
       set {gv = value;}
    }
    }
    Friday, June 09, 2006 6:17 PM

All replies

  • Ola Leandro,

    Você poderia estar utilizando Client-Script Callback: http://www.projetando.net/Sections/ViewArticle.aspx?ArticleID=56

    Tuesday, May 16, 2006 11:07 AM
    Moderator
  • Tem alguma forma de usar o Atlas igual o Ajax.net para executar uma rotina no server.
     
    Pois com o atlas não sei como executar um codigo no server diretamente de uma function em java script. Tem como fazer isto ?
    Tuesday, May 16, 2006 5:18 PM
  • Ola Leandro,

    Sim, você pode estar utilizando um método marcado com o atributo WebMethod.
    Tuesday, May 16, 2006 6:31 PM
    Moderator
  • Teria algum exemplo de como fazer este procedimento ?
     
    Tuesday, May 16, 2006 7:25 PM
  • Tuesday, May 16, 2006 7:43 PM
    Moderator
  • Procurando na net localizei este artigo http://weblogs.pontonetpt.com/luisabreu/posts/7670.aspx
     
    Estou utilizando o primeiro exemplo do artigo, mas não da certo, o codigo no server não é executado.
     
    Precisa ser feita mais alguma configuração que não foi passada no artigo para que o exemplo funcione ?
     
     
    Wednesday, May 17, 2006 12:01 AM
  • Resolvi meu problema utilizando o exemplo deste artigo
     
    Mas o exemplo do artigo so funciona no IE, postei abaixo do artigo o codigo necessario para fucionar em outro browser.
    Wednesday, May 17, 2006 10:09 PM
  • Israel fiz novos testes e estou utilizando o Atlas e nos métodos do WebForm uso o atributo WebMethod.
     
    Fazendo isso consigo acessar atraves do javascript métodos no servidor.
     
    Uns dos métodos acessados atualiza o conteudo de um GridView.
     
    [System.Web.Services.WebMethod]
    public bool Atualiza()
    {
        WebGridView1.DataSource =   WebGridView1.Carregar(0);     
        WebGridView1.DataBind();  
        return true;
    }
     
    Acesso normalmente esta método atraves de um script e o mesmo é processado normalmente, mas o problema que o conteudo do GridView não é alterado, nada na pagina é alterado.
     
    O que devo fazer para quando acessar este metodo atraves de javascript o GridView seja atualizado.
    Saturday, May 20, 2006 12:25 PM
  • Ola Leandro,

     

    Basta voce Chamar o metodo Update() do UpdatePanel que contem o Grid. Na versao de janeiro (se nao me engano) este metodo nao estava funcionando legal, mas ainda nao testei na versao de abril.

    Por exemplo,

    [System.Web.Services.WebMethod]
    public bool Atualiza()
    {
        WebGridView1.DataSource =   WebGridView1.Carregar(0);     
        WebGridView1.DataBind(); 
       UpdatePanel1.Update();
        return true;
    }
     
    Sds,
     
    Diego
    Wednesday, May 24, 2006 3:31 PM
  • Obrigado pela dica Diego, mas testei a opção acima e não obtive resuldado, a rotina no server é executada mas nada no webform é alterado.
      
    Wednesday, May 24, 2006 6:30 PM
  • Bom, vamos a alguns pontos.

    1) PartialRendering=true no Scriptmanager?

    2) Mode = Conditional no UpdatePanel?

    Como vc esta fazendo a chamada a este Webmethod no cliente? Pode colar o codigo para darmos uma olhada?

    Em ultima instancia voce poderia fazer o Databind a nivel de cliente com o controle ListView do Atlas (este é um controle de cliente, implementado em javascript) da um pouco de trabalho (principalmente na paginacao) mas funciona. Aqui voce pode conferir um exemplo:
    http://atlas.asp.net/docs/Walkthroughs/GetStarted/databind.aspx

    Sds,

    Diego
    Wednesday, May 24, 2006 7:25 PM
  • Diego as opções abaixo esta conforme foi dito acima
    PartialRendering=true no Scriptmanager
    Mode = Conditional no UpdatePanel
     
    Abaixo segue o codigo em javascript
     
    function Paginacao(pagina)
    {
     PageMethods.Atualiza(pagina, callbackMethod);
    }

    function callbackMethod( result )
    {
      // não faz nada no retorno
    }
     
     
    Aqui o codigo do server em C#
     
    [System.Web.Services.WebMethod]
    public bool Sorting(int pagina)
    {
    WebGridView1.DataSource = WebGridView1.Carregar(pagina);
    WebGridView1.DataBind();
    UpdatePanel1.Update();
    return true
    }
     
     
    Wednesday, May 24, 2006 8:08 PM
  • Leandro,

    Num momento de insonia esta noite tive uma ideia a respeito deste problema.

    Vc concorda comigo que um WebService, consumido a partir de uma pagina aspx, ou de uma pagina Atlas rodando no cliente, vai sempre retornar um envelope SOAP, seja em XML ou JSON?

    A partir dai podemos inferir que um WebMethod, sendo executado em um WebService ou em uma pagina ASPX retornara sempre envelope SOAP.

    Como a chamada ao UpdatePanel.Update esta sendo executada em um WebMethod, a engine do asp.net vai retornar apenas o envelope SOAP de response deste método. Pude confirir isso através de um sniffer, onde o delta Atlas da pagina realmente não é enviado.

    Solução: Chamar um método da pagina diretamente, sem assina-lo como WebService.

    Problema: Não tenho a menor idéia de como fazer isso, e em uma pesquisa rapida hoje pela amanha também não encontrei um meio de realizar esta chamada. Na hora do almoço ou então a noite quanto voltar da faculdade vou debugar os scripts do Atlas para ver se descubro como fazer o mesmo. Caso vc encontrei um meio de fazer tal chamada, ou outra solução para estre problema, por favor, post aqui para todos pois este assunto é de interesse geral.

    Espero ter ajudado.

    Sds,

    Diego

    Thursday, May 25, 2006 12:28 PM
  • Diego obrigado pela ajuda, fico muito grato.
    Como mesmo disse tambem não tenho ideia de como pode ser fetio isto, estou pesquisando.
     
    Caso encontre alguma solução poste aqui para a comunidade.
     
    ate+
    Thursday, May 25, 2006 9:14 PM
  • Diego, deu certo. Consegui resolvero problema. Verfique o Comments do link abaixo
     
     
     
     
    Wednesday, June 07, 2006 2:08 PM
  • Cara, show de bola!!! Resolve o problema perfeitamente. :D

    Só não consigo entender pq no Atlas não temos como assinar um método para ser chamado da forma tradicional, como um evento. Todos os outros frameworks para Ajax permitem isso. Quem sabe numa release futura. :D

    Leandro, muito obrigado por compartilhar conosco o seu sucesso.

    Estou copiando aqui a transcrição do link acima:

    • re: ATLAS: Aproximações à utilização da plataforma
      Luis Abreu
      Posted @ 5/31/2006 1:28 AM
      Ola.
      Infelizmente, nao podes fazer isso. os page methods sao para ser usados de forma semelhante aos web service methods. portanto, e suposto o teu metodo retornar um valor que sera tratado no lado cliente pelo metodo javascript de callback.

      quando tens um updatepanel, a ideia e actualizar essa porcao da janela sempre que um controlo mantido no seu interior gere um evento que obriga a um postcbak (ex.: quando tens un asp:button colocado no interior de um panel, obtens um postback parcial automatico). portanto, neste caso, a solucao pode passar pela adicao de um dummy button que forca a um postback.
    • # re: ATLAS: Aproximações à utilização da plataforma
      Leandro
      Posted @ 6/6/2006 7:15 PM
      Compreendi o funcionamento, mas o que seria um dummy button ?

      Tentei colocar um button dentro do updatepanel, e atraves do java script executar o evento de onclick, mas não obtive sucesso.
    • # re: ATLAS: Aproximações à utilização da plataforma
      Luis Abreu
      Posted @ 6/7/2006 1:51 AM
      Um dummy button e um botao q n faz nada...so esta la para iniciar o postback. dai o nome. o q tens de fazer e colocar o botao no interior do updatepanel e esconde-lo:
      <asp:button runat="server" id="dummy" style="display:none" />

      depois simulas escreves algo deste genero:
      $("dummy").click();

      isto deve ser suficiente para iniciar o postback.
    • # re: ATLAS: Aproximações à utilização da plataforma
      Leandro
      Posted @ 6/7/2006 5:52 PM
      Não tinha conseguido antes, pois estava colocando
      document.getElementById('dummy').onclick();


      Mas agora ficou perfeito, funcionou certinho...
      Obrigado.

    Wednesday, June 07, 2006 2:21 PM
  • Como disse nos post anteriores estou utilizando o WebMethod no metodos para poder acessa-lo via javascript.
     
    Esta funcionado perfeito, mas todos os metodos estão no fonte da propria pagina, gostaria de coloca-los no fonte de uma componente.
     
    Tentei colocar mas os scripts não são criados quando a pagina é carregada, alguem sabe como posso fazer para resolver ?
    Thursday, June 08, 2006 11:27 PM
  • Leandro,

    Para componentizar, vc vai ter que colocar esses métodos em um WebService. O único problema é que vc não terá mais acesso aos controlesda página para altera-los.

    O que você poderia fazer é implementar o grosso dos métodos numa classe e fazer apenas chamadas a esses métodos na sua página.

    Sds,
    Diego
    Friday, June 09, 2006 12:13 AM
  • Diego, este é o problema , não queria nem colocar as chamadas na pagina, pois terei que ficar repetindo o codigo em todas as paginas que utilizar o componente.
     
    Estou fazendo igual o codigo abaixo
     
        //Codigo na Pagina
        [System.Web.Services.WebMethod]
        public int DeleteRegistro(string IdCampos, bool Tipo)
        {
            return WebGridView1.Delete(IdCampos, Tipo);
        }
     
        //Codigo do Componte WebGridView
        public int Delete(string IdCampos,bool Tipo)
        {
            // codigo....
            return QuantidaRegistro;
        }
     
     
    Gostaria de colocar a chamada direto no fonte do componente, sendo assim so de adcionar o mesmo na pagina tudo ja ficaria disponivel. Sera que existe alguma forma de fazer isto ?
    Friday, June 09, 2006 12:34 AM
  • Opa, tem sim Leandro, basta vc criar uma classe que herde o componente, por exemplo:

    public class GridViewExtended : GridView

    {

      public void Delete()

      {

      }

    }

    Aqui tem um artigo que pode te ajudar, é basicamente a mesma idéia:

    http://blogs.msdn.com/paraga/archive/2005/12/13/503081.aspx

     

    Sds,

    Diego

    Friday, June 09, 2006 2:11 AM
  • O Componente eu ja fiz, esta tudo certo. Ja coloquei o metodo delete dentro do mesmo e acesso ele normalmente.
     
    O problema é que preciso acessar este metodo "delete" que pertence ao componente atraves de um javascript, sendo assim, faço uma chamada a ele atraves da pagina onde esta o componente com a opção WebMethod.
     
    Com isso consigo acessar atraves de um script o metodo do componente.
     
    O grande problema é que vou utilizar este GridView que estou customizando em varias paginas, sendo assim terei que codificar todas elas com as metodos de chamada ao delete usando o WebMethod o que seria um retrabalho, gostaria de incapisular os metodos usando o WebMethod dentro do proprio componente.
    Friday, June 09, 2006 11:11 AM
  • Agora entendi.

    Vc definiu o método no seu controle extendido, e este metodo não é disponibilizado no PageMethods da página em questão, isso? Acho que este é o comportamento normal, pois este WebMethod realmente não está no escopo da página.

    E se vc implementar este Webmethod em um fomulário pai que será herdado por todos os outros? Nao funciona?

    Outra solução pode ser utilizar reflection com CodeDom.

    Sds,
    Diego
    Friday, June 09, 2006 2:19 PM
  • Quando vc diz um formulario pai, seria uma MasterPage ?
     
    Se for uma MasterPage acho que não teria como , pois o componetne esta na pagina e assim não tera como acessar o metodo do mesmo atraves da MasterPage.
     
    O que seria reflection com CodeDom ? Com poderia utiliza-lo ?
    Friday, June 09, 2006 2:25 PM
  • Falo de você criar uma classe que herde System.Web.UI.Page e implementar este WebMethod nesta classe. Ai em todos os CodeBehind de suas página vc muda a herança padrão de System.Web.UI.Page para a classe que você acabou de criar.

    Ex:
    Antes:
    public class suapagina_aspx : System.Web.UI.Page
    {
    ....
    }


    Depois:
    public class suapagina_aspx : SuaClassePageBaseComWebMethod
    {
    ...
    }

    Para estudar Reflection:
    http://www.codeguru.com/csharp/csharp/cs_misc/reflection/article.php/c4257/

    CodeDom:
    http://www.15seconds.com/issue/020917.htm

    Sds,
    Diego
    Friday, June 09, 2006 3:34 PM
  • Diego estou com uma duvida. Nesta classe onde irei implementar os WebMethod com irei acessar os metodos do componente GridView que esta pagina ?
    Friday, June 09, 2006 4:46 PM
  • Acho que se você criar uma propriedade virtual nessa sua classe base do tipo do controle que deseja acessar e fazer um override dela na pagina vai funcionar herdada vai funcionar.
    Friday, June 09, 2006 5:53 PM
  • Desculpe Diego, mas como poderia esta fazendo isto, teria como me passar um exemplo.
    Friday, June 09, 2006 6:00 PM
  • (fiz o exemplo em vermelho e preto em homenagem ao Atlético Paranaense, hehehe :-P )

    Então, veja só, na classe base vc cria a propriedade da GridView, ai eu defini dentro dela a geração de uma exception, apenas por motivo de controle.

    Na classe onde vc herda a classe base, vc reescreve a propriedade gView, que lá irá expor o seu controle de gridView definido.

    Acredito que o metodo assinado como Webmethod na classe base se tornará um PageMethod no Atlas.

    Sds,
    Diego

    public class
    SuaClassePageBaseComWebMethod : System.Web.UI.Page
    {
    public virtual gView
    {
       get { throw new Exception("Nao Implementado"); }
       set {
    throw new Exception("Nao Implementado");}
    }

    [WebMethod]
    public void MetodoBaseQueAcessaGridView()
    {
      gView.DataSource = ......
     /* qquer coida acessando GridView por gView*/
    }
    }

    public class suapagina_aspx : SuaClassePageBaseComWebMethod
    {
     private GridView gv;
     public override gView
    {
       get {return gv;}
       set {gv = value;}
    }
    }
    Friday, June 09, 2006 6:17 PM
  • Mais uma duvida, quando declaro o public virtual , ocorre 7 erros.
     
    Error 1 Invalid token '{' in class, struct, or interface member declaration 
    Error 2 Invalid token '{' in class, struct, or interface member declaration
    Error 3 Class, struct, or interface method must have a return type 
    Error 4 Type expected 
    Error 5 A namespace does not directly contain members such as fields or methods 
    Error 6 Expected class, delegate, enum, interface, or struct 
    Error 7 Type or namespace definition, or end-of-file expected 
     
     
    Tenho que importar algum referencia ?
    Friday, June 09, 2006 6:42 PM
  • Ixi, esqueci o tipo, tbem nao verifiquei a sintaxe pq digitei o codigo direto aqui no forum.

    Mas fica assim:
     public override GridView gView
    {
       get {return gv;}
       set {gv = value;}
    }

    Friday, June 09, 2006 6:45 PM
  • Obrigado Diego, deu certo. Ficou assim...
     
    //Na classe base
    public class PageMethods : System.Web.UI.Page
    {   
        public virtual WebGridView.WebGridView WGridView
        {
          get { throw new Exception("Nao Implementado"); }
          set { throw new Exception("Nao Implementado"); }
     
        }
     
        [System.Web.Services.WebMethod]
        public bool Resizing(string campo, string width)
        {
            return WGridView.AtualizaWidth(campo, width);
        }
    }
     
     
    //Na pagina, onde já tenho um componente chamado WebGridView1
     
    public partial class Default : PageMethods
    {   
        public override WebGridView.WebGridView WGridView
        {
            get
            {
                return WebGridView1;
            }
            set
            {
                WebGridView1 = value;
            }
        }
    }
     
    Friday, June 09, 2006 7:10 PM
  •  Diego Neufert wrote:
    Cara, show de bola!!! Resolve o problema perfeitamente. :D

    • # re: ATLAS: Aproximações à utilização da plataforma
      Luis Abreu
      Posted @ 6/7/2006 1:51 AM
      Um dummy button e um botao q n faz nada...so esta la para iniciar o postback. dai o nome. o q tens de fazer e colocar o botao no interior do updatepanel e esconde-lo:
      <asp:button runat="server" id="dummy" style="display:none" />

      depois simulas escreves algo deste genero:

    • $("dummy").click();

      isto deve ser suficiente para iniciar o postback.

     

    Srs, depois de "rodar" a internet inteira em busca de uma solução para o problema que tenho aqui, este post me parece resolver isso.

    Me desculpem a ignorância , mas onde extamente eu coloco esta instrução???O botão eu já coloquei no UpdatePanel que eu kero que seja atualizado, mas esta instrução que aciona o botão eu não sei onde colocar...

    Friday, February 09, 2007 4:08 PM
  • Estou com o mesmo problema quebrando a cabeça aqui..!!!!

    qualquer coisa postem aqu!!

     

    Wednesday, April 25, 2007 12:20 AM
  • DarkDucke o que vc precisa fazer ? 

    Quando postei estas duvidas estava usando a versão anterior do ajax ( atlas ) pode ser que na versão atual já tenha o recurso que vc precisa 

    Wednesday, April 25, 2007 1:00 AM
  •  Leandro de Souza wrote:

    DarkDucke o que vc precisa fazer ? 

    Quando postei estas duvidas estava usando a versão anterior do ajax ( atlas ) pode ser que na versão atual já tenha o recurso que vc precisa 

     

    veja aqui que vc vai entender direitinho

     

    já estou quase lah eu acho

     

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=1516704&SiteID=21

     

    Obrigado!

    Wednesday, April 25, 2007 1:57 AM