私はASPネットAjaxツールキットを使用しており、GridView
内にありUpdatePanel
、すべて正常に動作します。
生成する必要があるテーブルに対していくつかを実行しようとすると、返される DOM に(または table )JQuery
の兆候はありません。これはすべて ASP によって生成されたものだと思いますか?GridView
HTML
Javascript
GridView
内にある に対してアクションを実行するにはどうすればよいUpdatePanel
ですか?
私はASPネットAjaxツールキットを使用しており、GridView
内にありUpdatePanel
、すべて正常に動作します。
生成する必要があるテーブルに対していくつかを実行しようとすると、返される DOM に(または table )JQuery
の兆候はありません。これはすべて ASP によって生成されたものだと思いますか?GridView
HTML
Javascript
GridView
内にある に対してアクションを実行するにはどうすればよいUpdatePanel
ですか?
ASP.NET は、特定の条件下でコントロールの名前をマングルします。生成されたソースを調べて、生成時に ASP.NET によって指定された名前でコントロールを参照していることを確認してください。おそらく、マークアップで付けた名前ではありません。
これには、私が考えることができる3つの解決策があります。Dave が示唆するように、サーバーから ClientID を使用して javascript を注入する最初の方法は機能しますが、非常に速く面倒になります。私はしばらくの間これを行いましたが、サーバー側とクライアント側のそのような密結合が問題を引き起こします。
2 つ目は、css クラスなど、エンティティを識別する別の方法を提供することです。これは最初のオプションよりも優れていますが、多くの無関係なクラス定義をそのままにしておく必要があります。
私が好む解決策は、セレクター エンジンを持つ jQuery のような JavaScript フレームワークを使用することです。そうすれば、巧妙な選択と DOM トラバーサルによって UniqueID ガベージを回避できます。
myControl という名前のコントロールがあるとします。ASP.Net はその前に巨大な名前空間を生成するため、レンダリング時に ID の衝突はありません。ただし、myControl で終わる ID を持つすべてのオブジェクトを選択する $('[id$=myControl]') を実行することで、すべての myControl を選択できます。他のフレームワークでもこれを行う類似の方法があると思われますが、例を挙げられるほど詳しくはありません。
コードビハインドで、主張のために Page_Load で JavaScript を生成できる場合は、GridView1.ClientID などを JavaScript に挿入できます。(たとえば、ここでは TextBox を使用しますが、同じ概念に従います。)
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);
}