3

ASP.NET ページに JavaScript 関数があり、グリッド ヘッダーで [すべてをチェック] チェックボックスがオンになっているときに、クライアント側のグリッドのすべてのボックスをチェックします。これは、ループ内の各行の JS 関数で実際のコントロール ID を作成し (つまり、 + '_ ctl' + i + ' ' + ここで、i は現在のループの行インデックスです)、結果のコントロールを次のように設定します。チェック済み。

これは長い間正常に機能していましたが、現在は機能しなくなりました。その理由は、.NET レンダリング エンジンまたは何かが内部コントロール ID を異なる方法で作成しているためです。たとえば、これがまだ機能している別のサーバーでページのソースを表示する場合、コントロール名はdgMain__ctl2_cbxCheckedですが、これが機能していないサーバーのコントロール名はdgMain__ctl02_cbxCheckedです。違いは、動作していないバージョンの 'ctl' 部分の数値 ID の前に余分な ' 0 ' が付いていることです。

これは .NET のバージョンと関係があるのでしょうか? 比較的新しい(古いマシンで動作していた)ローカルマシンでは動作しませんが、運用環境にデプロイされている古いサーバーでは引き続き動作します。両方のバージョンで ASP.NET 1.1 が実行されています (ええ、わかっています - 時間をかけてください)。

これを解決する方法の手がかりはありますか?

4

1 に答える 1

1

これはかなり危険な行為です。代わりに、結果のコントロールClientIDのサーバー側を収集し、ClientScriptManager. もう 1 つの方法は、CssClassjQuery またはその他の DOM 操作ライブラリを使用して、コントロールを見つけることです。

コントロールの命名規則により、ID は保証されません。.NET のバージョンごとに変更される可能性があり (可能性は低いですが)、ページ上の他のコントロールやユーザー コントロールのネスト レベルなどに基づいて変更される可能性があります。

于 2012-11-14T20:45:01.617 に答える