Pergunta

Eu quero recriar a postagem painel de atualização sem o uso de um painel de atualização para fazer a postagem. Qual é o método genérico para fazer isso?

Por exemplo, em Stackoverflow, quando você votar para cima ou para baixo sobre uma questão que faz um postback para atualizar o banco de dados e eu aposto que eles não utilizar um painel de atualização.

O que eu tenho?

Eu tenho uma tabela com dados da tabela. Quando clico no item td como uma coluna inteira, eu quero fazer uma atualização para o banco de dados e também atualizar um gridview na própria página. Os shows gridview todos os itens atualmente clicados na tabela porque foi atualizado via "nosso método".

À procura de um bom método genérico que eu poderia usar para um monte de postbacks assíncronos sem painel de atualização.

Foi útil?

Solução

A maneira que estouro de pilha funciona difere de duas maneiras importantes de que o artigo CodeProject.

  • Stack Overflow está fazendo o seu pedido de AJAX contra uma ação do controlador ASP.NET MVC, não um ASPX página independente. Você pode considerar este como o análogo MVC de um método de página ASP.NET AJAX. Em ambos os casos, o método ASPX vai ficar para trás em termos de desempenho.

  • pedido de AJAX do Stack Overflow retorna um JSON serializado resultado, não texto simples ou HTML arbitrários. Isso faz com que manuseá-lo no lado do cliente mais padronizado e geralmente limpo.

Por exemplo:. Quando votei a esta pergunta-se um pedido de XmlHttpRequest foi feita para / perguntas / 171000 / voto, com um "voteTypeId" de 2 nos dados POST

O controlador que lidou com o pedido adicionado o meu voto a um algum lugar da tabela e, em seguida, respondeu com esta JSON:

{"Success":true,"NewScore":1,"Message":"","LastVoteTypeId":2}

Usando essa informação, este JavaScript cuida de atualizar a exibição do lado do cliente:

var voteResult = function(jClicked, postId, data) {
  if (data.Success) {
    jClicked.parent().find("span.vote-count-post").text(data.NewScore);
    if (data.Message)
      showFadingNotification(jClicked, data.Message);
  }
  else {
    showNotification(jClicked, data.Message);
    reset(jClicked, jClicked);

    if (data.LastVoteTypeId) {
      selectPreviousVote(jClicked, data.LastVoteTypeId);
    }
  }
};

Se você estiver usando WebForms, a exemplo de chamar métodos de página que você encontrou no meu blog é definitivamente no estádio direita.

No entanto, gostaria de sugerir que você considere um serviço web para qualquer funcionalidade centralizada (como neste exemplo de votação), em vez de métodos de página. métodos de página parecem ser um pouco mais fácil de escrever, mas eles também têm algumas desvantagens de reutilização e tendem a proporcionar uma ilusão de segurança acrescentou que não está realmente lá.

Este é um exemplo de fazer a mesma coisa que você encontrou, mas com serviços web (os comentários sobre este post realmente levou para o cargo que você encontrou):

http: // encosia .com / 2008/03/27 / utilizando-jquery-a-consumir-aspnet-json-web-services /

Outras dicas

Você pode usar apenas uma chamada de AJAX padrão para alcançar este objetivo. Criar uma página .aspx que atualiza o banco de dados em seu método Page_Load, e exibe qualquer informação desejada (como o valor DB atual após a atualização) como XML. Em seguida, fazer uma chamada de AJAX para essa página usando jQuery.

Você também pode retornar um HTML fragmento (ou seja, um GridView atualizado), e usar jQuery para inserir o HTML atualizado para a página atual.

Edit: Amostra 2 desta página deve ser muito próximo ao que você quer:
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx

Este link é o que eu encontrei para ser a melhor coisa a fazer e permite que eu use métodos JavaScript e web.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top