Question

J'utilise la boîte à outils ASP Ajax et j'ai un GridView dans UpdatePanel , tout fonctionne correctement.

Lorsque j'essaie d'exécuter JQuery sur la table à générer, aucun signe de GridView (ni de table HTML ) dans le DOM qui est renvoyé. Je suppose que tout cela est fait par le Javascript ?

Comment puis-je effectuer des actions sur un GridView situé dans un UpdatePanel ?

Était-ce utile?

La solution

ASP.NET modifie les noms des contrôles dans certaines conditions. Vous souhaiterez peut-être examiner la source générée pour vous assurer de référencer le contrôle par le nom qui lui est donné par ASP.NET lors de sa génération. Ce n'est probablement pas le nom que vous avez donné dans la marque.

Autres conseils

Si vous pouvez générer votre javascript dans le code ci-dessous, dans le Page_Load par insistance, vous pouvez alors injecter votre GridView1.ClientID, etc. dans votre javascript. (J'utilise une zone de texte ici par exemple, mais elle suit le même concept.)

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);
}

Il y a trois solutions à cela auxquelles je peux penser. Le premier, injecter ClientID depuis le serveur avec JavaScript comme le suggère Dave, fonctionne, mais devient très compliqué très rapidement. Je l'ai fait pendant un moment, mais ce type de couplage étroit entre le côté serveur et le côté client pose des problèmes.

La seconde consiste à fournir un autre moyen d’identifier les entités, comme une classe css. C’est mieux que la première option, mais vous laisse beaucoup de définitions de classe superflues que vous devez conserver.

La solution que je préfère consiste à utiliser un framework javascript, tel que jQuery, doté d'un moteur de sélection. De cette façon, vous pouvez contourner les ordures UniqueID grâce à une sélection intelligente et à une traversée du DOM.

Disons que vous avez un contrôle nommé myControl. Avant cela, ASP.Net générera un énorme espace de noms afin d'éviter toute collision d'identifiant lors du rendu. Mais vous pouvez sélectionner chaque myControl en faisant $ ('[id $ = myControl]') qui sélectionne chaque objet avec un identifiant se terminant par myControl. Il existe probablement des manières analogues de le faire dans d'autres cadres, mais je ne les connais pas assez pour donner un exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top