Pergunta

Ter um pouco de um problema peludo ao enviar dados através de uma chamada AJAX jQuery. Basicamente, os valores do formulário de campos de formulários que foram adicionados dinamicamente para a tela em uma grade tubular usando jquery são não atualizar em um lote de economia de comando.

Basicamente, eu tenho uma lista de grade que exibe todas as linhas atuais salvas no banco de dados com cada coluna que contém campos de formulário. Em seguida, tenho um formulário no topo da página, que é o seu típico adicionar outro formulário de detalhes. Você digita seus valores, prima "add" este é salvo no banco de dados através de um jquery json ajax chamada, e seu formulário de dados é adicionado e refletida em uma nova linha na tabela de listas. (esta parte funciona)

As minhas mentiras problema com quando você deseja alterar os valores do formulário na linha da tabela jQuery recém-adicionado . Quando o botão Salvar é pressionado, apenas a qualquer um dos de linha da tabela já construídas será salvo-re. Sua dinâmica de dados de formulário linha faz não salvar. A atualização de chamadas usa jQuery ajax e modelo ASP.NET MVC vinculativo. Em "Adicionar" Estou retornando um MVC asp.net "visão parcial" para a minha resposta ajax jquery e está sendo adicionado a uma grade listando tabela usando $("#tablename tr:last").after(result).

O que eu já ter deduzido é, como disse, a nova linha adicionados dinamicamente não actualização. Eu tenho um conjunto IList<Item> voltou na minha lista vinculativa modelo MVC para o meu método de ação do controlador que contém toda a lista de itens, menos as linhas de campo de formulário dinâmicos acrescentou jQuery recém-criados. Este é o problema e por que quando você executar uma atualização de página, as linhas estão de volta ao ORIGINAL valores do formulário entraram em add inicial.

Todas as ideias por que meus de IList<Item> não iria incluir essas linhas adicionadas dinamicamente? Inspecionando no Firebug eles usam o mesmo convento nomeação em seu atributo nome e tudo deve estar bem.

Graham.

Atualização de 01 de maio 11:00 GMT + 10: Eu não receber os valores quando se muda o modelo de vinculação de IList para FormCollection. Eu não quero ter que usar FormCollection em vez de ligação modelo, mas ele levanta a questão se eu posso obtê-lo corretamente através FormCol, por que não modelo fichário IList? Comparei a entrada matriz para um item de trabalho, e todos eles se encaixam os mesmos critérios e valores.

Foi útil?

Solução

Eu não sou um programador ASP, mas eu faço um pedaço de um monte de trabalho jquery. Se eu entender o seu problema corretamente, suas linhas geradas dinamicamente não estão sendo ligados às funções de retorno de chamada que irá executar suas operações de atualização.

Você pode vincular os elementos gerados dinamicamente para uma chamada de retorno ou usando a função jQuery 'ao vivo' (como Wikidkaka estava tentando dizer a você) ou você pode vincular os elementos recém-criados manualmente na função callback que é acionado quando o ajax chamada retorna.

Eu recomendaria usar a função nativa ao vivo que foi adicionado no (creio eu) a última versão do jQuery. Ela vai lhe poupar de ter que escrever linhas adicionais para manualmente ligar os retornos de chamada e faz a manutenção do código mais fácil.

mudar Então:

$('div.your-save-buttons').click(updateFunction);

para

$('div.your-save-buttons').live(updateFunction);

Outras dicas

Use o livequery plugin para o que você está tentando fazer. Você pode encontrá-lo aqui - http://docs.jquery.com/Plugins/livequery

Esta não funciona em elementos adicionados mais dinâmico:

$("select something").onSomeEvent("do something");

Mas com livequery plugin que você pode fazê-lo funcionar, alterando seu código JS para algo como abaixo:

$("select something").livequery('event name','do something');

Se a propriedade em seu modelo é uma lista de números inteiros, você pode usar IEnumerable<int> para obter modelo automático de ligação. Isso funciona tanto para um método de ação, cujo parâmetro é um um método de ação cujo parâmetro é um modelo que tem uma propriedade que é um IEnumerable<int> IEnumerable<int> e. Por exemplo, assim:

<%= Html.Hidden("myField", 1) %>
<%= Html.Hidden("myField", 1) %>

e

public ActionResult Update(IEnumerable<int> myField) { }

ou

public ActionResult Update(MyModel myModel) { }
public class MyModel {
    public IEnumerable<int> myField { get; set; }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top