Domanda

Sto usando il toolkit Ajax ASP net e ho un GridView all'interno del UpdatePanel , tutto funziona bene.

Quando tento di eseguire un JQuery sulla tabella che dovrebbe essere generata, non c'è alcun segno del GridView (o della tabella HTML ) nel DOM restituito. Suppongo che questo sia fatto da Javascript generato da ASP?

Come posso eseguire qualsiasi azione su un GridView che si trova in un UpdatePanel ?

È stato utile?

Soluzione

ASP.NET manipolerà i nomi per i controlli in determinate condizioni. È possibile che si desideri esaminare l'origine generata per assicurarsi di fare riferimento al controllo con il nome assegnato da ASP.NET quando viene generato. Probabilmente non è il nome che gli hai dato nel markup.

Altri suggerimenti

Se puoi generare il tuo javascript nel codebehind, nel Page_Load per insistenza, allora puoi iniettare GridView1.ClientID, ecc. nel tuo javascript. (Uso qui un TextBox per esempio, ma segue lo stesso concetto.)

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

Ci sono tre soluzioni a cui posso pensare. Il primo, iniettando javascript dal server con ClientID come suggerisce Dave, funziona ma diventa davvero disordinato molto velocemente. L'ho fatto per un po ', ma quel tipo di accoppiamento stretto tra lato server e lato client causa problemi.

Il secondo è fornire un altro modo per identificare le entità, come una classe css. Questo è meglio della prima opzione, ma ti lascia con molte definizioni di classe estranee che devi tenere dritto.

La soluzione che preferisco è usare un framework javascript come jQuery che ha un motore di selezione. In questo modo, puoi aggirare la spazzatura UniqueID attraverso una selezione intelligente e l'attraversamento del DOM.

Supponiamo che tu abbia un controllo chiamato myControl. ASP.Net genererà un enorme spazio dei nomi prima di quello, quindi non ci sono collisioni ID quando viene eseguito il rendering. Ma puoi selezionare ogni myControl facendo $ ('[id $ = myControl]') che seleziona ogni oggetto con un id che termina con myControl. Probabilmente ci sono modi analoghi per farlo in altri framework, ma non ho abbastanza familiarità con loro da fare un esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top