質問

ASP net Ajaxツールキットを使用しており、 UpdatePanel 内に GridView があります。すべて正常に動作します。

生成するテーブルに対して JQuery を実行しようとしても、 GridView (またはテーブル HTML )返されるDOM内。これはすべてASPで生成された Javascript で行われていると思いますか?

UpdatePanel 内にある GridView でアクションを実行するにはどうすればよいですか

役に立ちましたか?

解決

ASP.NETは、特定の条件下でコントロールの名前を破壊します。生成されたソースを見て、生成時にASP.NETによって指定された名前でコントロールを参照していることを確認することができます。マークアップで付けた名前ではないでしょう。

他のヒント

コードビハインド、主張のための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);
}

これには3つの解決策があります。 Daveが示唆しているように、ClientIDを使用してサーバーからjavascriptを挿入する最初の方法は機能しますが、非常に高速で乱雑になります。私はしばらくこれをしましたが、サーバー側とクライアント側のそのような密結合は問題を引き起こします。

2番目は、cssクラスなど、エンティティを識別する別の方法を提供することです。これは最初のオプションよりも優れていますが、多くの無関係なクラス定義を残しておく必要があります。

私が好む解決策は、セレクタエンジンを持つjQueryのようなjavascriptフレームワークを使用することです。そうすれば、巧妙な選択とDOMトラバーサルを通じてUniqueIDガーベッジを回避できます。

myControlという名前のコントロールがあるとします。 ASP.Netはその前に巨大な名前空間を生成するため、レンダリング時にidの衝突は発生しません。しかし、myControlで終わるIDを持つすべてのオブジェクトを選択する$( '[id $ = myControl]')を実行すると、すべてのmyControlを選択できます。他のフレームワークでこれを行う類似の方法はおそらくありますが、例を挙げるほどそれらに精通していません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top