.ascxユーザーコントロールで、<%= obj.ClientID%>の展開に問題があります。
javascript関数を含む.jsファイルがあります。
function doSomething(objectId)
{
...
}
いくつかのhtml要素を含む.ascxファイルがあり、1つの要素のonclick =でdoSomething()を呼び出して、その.ascxファイル内の要素のIDを渡します。渡されたIDは1つ以外の要素のものです。クリックされているので「これ」は使えません。
例を挙げればもっと明確になるかもしれません。
これは機能します:
<script type="text/javascript">
function redirect()
{
doSomething('<%= top.ClientID %>');
}
</script>
<div id="top" runat="server">
<img src="..." alt="..." onclick="redirect();"/>
</div>
しかし、これはしません:
<div id="top" runat="server">
<img src="..." alt="..." onclick="doSomething('<%= top.ClientID %>');"/>
</div>
ソースを見ると、「doSomething('ctl00_myControl_top');」ではなく、<%=%>の置換が行われていないことがわかります。「doSomething('<%= top.ClientID%>');」が表示されます
何らかの理由で、スクリプトの拡張は前者の場合に発生しますが、後者の場合には発生しません。もちろん、回避策は受け入れられません。ページにコントロールの複数のコピーを含めると壊れてしまうためです。アクセスできるのは1つのインスタンスの「redirect()」関数だけです。
この置換を機能させる方法についてのアイデアはありますか?