Pergunta

Estou usando o ASP net Ajax Toolkit e ter um GridView dentro do UpdatePanel, tudo funciona bem.

Quando tento executar alguns JQuery contra a mesa que deve ser gerado, não há qualquer sinal da GridView (ou HTML tabela) no DOM que é retornado. Estou assumindo tudo isto é feito pela ASP Javascript gerado?

Como posso executar qualquer ação em um GridView que está dentro de um UpdatePanel?

Foi útil?

Solução

ASP.NET vai mangle os nomes de controles sob certas condições. Você pode querer olhar para a fonte gerado para se certificar de que você está fazendo referência o controle pelo nome dado pelo ASP.NET quando ele é gerado. Provavelmente não é o nome que você deu no mark up.

Outras dicas

Se você pode gerar o javascript no codebehind, no Page_Load para a insistência, então você pode injetar sua GridView1.ClientID, etc em seu javascript. (Eu uso uma caixa de texto aqui, por exemplo, mas segue o mesmo conceito.)

protected void Page_Load(object sender, EventArgs e)
{
    string js = "$(document).ready(function(){$(\"#" + this.TextBox1.ClientID + "\").text('hello world');});";
    HtmlGenericControl script = new HtmlGenericControl("script");
    script.Attributes.Add("type", "text/javascript");
    script.InnerHtml = js;
    Page.ClientScript.RegisterStartupScript(this.GetType(), "key", js, true);
}

Há três soluções para este que eu posso pensar. O primeiro, injetando javascript a partir do servidor com ClientID como Dave sugere, funciona, mas fica realmente confuso muito rápido. Eu fiz isso por um tempo, mas esse tipo de tight-acoplamento do lado do servidor e do lado do cliente causa problemas.

O segundo é fornecer uma outra maneira de identificar as entidades, como uma classe css. Isto é melhor do que a primeira opção, mas deixa você com um monte de definições de classe estranhas que você tem que manter em linha reta.

A solução que eu prefiro é usar um quadro javascript como jQuery que tem um motor selector. Dessa forma, você pode obter em torno do lixo UniqueID através de algum selecção inteligente e DOM travessia.

Vamos dizer que você tem um controle chamado myControl. ASP.Net irá gerar um enorme espaço de nomes antes que por isso não há qualquer colisão ID quando ele processa. Mas você pode selecionar todos os myControl fazendo $ ( '[id $ = myControl]') que seleciona todos os objetos com um id que termina com myControl. Há provavelmente formas análogas de fazer isso em outros frameworks, mas eu não sou suficientemente familiarizado com eles para dar um exemplo.

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