0

.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()」関数だけです。

この置換を機能させる方法についてのアイデアはありますか?

4

2 に答える 2

2

私のマシンで動作しますか?

<div id="top" runat="server">
    <a href="#" onclick="doSomething('<%= top.ClientID %>')">rarrarara</a>
</div>

なる

<div id="ctl00_ContentPlaceHolder1_top">
    <a href="#" onclick="doSomething('ctl00_ContentPlaceHolder1_top')">rarrarara</a>
</div>
于 2010-01-22T01:41:20.027 に答える