Definir runat = “servidor” do JavaScript

Existe uma maneira de definir o atributo runat do JavaScript do lado do cliente? Preciso adicionar linhas a uma tabela depois que a página é carregada e preciso disponibilizar os dados das células para o servidor. Eu estou bem em fazer o primeiro (par de) linha (s) runat="server" , mas eu não sei quantas linhas o usuário vai querer, então não é apenas uma questão de adicionar um monte de linhas escondidas e mostrar quando o usuário clicar em “Add New Row”.

Eu posso pensar em algumas maneiras de fazer isso:

  1. Postback para a página cada vez que o usuário clica no botão “Adicionar novas linhas” “e manipular o atributo runat no servidor em vez de em JavaScript / jQuery. Eu não quero fazer isso, mas como parece ser a única maneira infalível Eu posso precisar.

  2. Adicione runat="server" às células com jQuery e, em seguida, referencie-as na próxima vez que eu fizer um postback, mas não faça nada com elas atualmente. Esta seria a solução ideal para mim, mas não tenho certeza se o ASP.NET funciona dessa maneira. Considerando que o WebForms foi criado antes que os desenvolvedores de JavaScript dessem a ideia de que poderíamos adicionar elementos a uma página depois que a página é carregada , eu não estou prendendo minha respiração.

  3. Dê a table ou talvez o atributo runat , então, de alguma forma, consulte seus filhos. Isso também seria melhor que o número 1, mas também não tenho certeza de como fazer isso, ou mesmo se realmente pode ser feito.

Aqui está uma versão simplificada do que eu gostaria de fazer:

 
Some Content

E uma versão simplificada do jQuery:

 $("#").on("click", ".this_table_button", function() { $("").append(" Some Content   ); }); 

Isso não faz sentido porque as alterações no DOM não são enviadas de volta ao servidor quando a página é postada de volta. Adicionar atributos que não significam absolutamente nada para um navegador (como runat ) não terá nenhum efeito. Mesmo se sua tabela estiver configurada para runat="server" , as alterações do lado do cliente nessa tabela não serão detectadas pelo servidor.

A opção 1 (postback toda vez que uma nova linha é adicionada) é talvez o método mais fácil e basicamente o que o ASP.NET foi projetado desde a versão 1.0 (antes que os aplicativos da web se tornassem populares)

Para uma experiência mais dinâmica, o que você precisa fazer é armazenar suas alterações do lado do cliente localmente e, em seguida, publicá-las novamente no servidor por meio de um elemento de formulário padrão, como um campo de input oculto. Você pode adicionar qualquer número arbitrário de campos ocultos a um elemento

e lê-los no servidor usando o object Request . Ou, talvez você poderia serializar os novos dados de linha via JSON ou XML. Se você estiver simplesmente tentando salvar novas linhas em um database, talvez implemente um botão Salvar que envie uma única linha nova para o servidor via AJAX e salve-a imediatamente.

 runat="server" 

… é um parâmetro de diretiva do servidor que não significa nada para o navegador. O servidor conecta todos os methods baseados nesta diretiva antes de renderizar a página para HTML e enviá-la para o navegador do Cliente. No momento em que JS puder fazer a alteração no elemento e definir runat="server" o servidor não poderá receber a diretiva.