0

WebControls.TableCell から派生したクラスがあります。Text プロパティが設定されたら、asp:Panels と asp:LiteralControls をセルに動的に追加するメソッドを呼び出します。これらのコントロールを Javascript で参照したいので、当然 JS 関数でパネルの ClientId を使用してみました。ただし、これらのコントロールには ClientId が設定されていません (文字列は空です)。どうしてこれなの?ClientIds を強制的に設定するにはどうすればよいですか?

一時的な解決策として、ClientIDMode を "static" に設定し、ID を独自に作成しましたが、JS でそれらの ID を参照するのが難しいため、これでは満足できません。なんで?たとえば、「12345」を 1 つのコントロールに割り当てると、クライアント側で「MainContent_123456」のように変更されます。「MainContent」部分が修正されていないため、これは悪いことです。したがって、クライアント側の実際の ID がどうなるかはわかりません。現在、jQuery を使用してコントロールを取得できますが$ctrl = $('[id$='12345']');、ID に「123456」が含まれるコントロールを取得するため、これはダーティです。

それでは、元の質問に戻ります。カスタム TableCells のパネルに ClientIds を自動的に設定するにはどうすればよいですか?

編集:コードが追加されました

 protected void Page_Load(object sender, EventArgs e)
    {
        this.ClientIDMode = System.Web.UI.ClientIDMode.Static;
    }

コントロールをカスタム TableCell に追加するメソッドのコード:

        Panel remainingTextPanel = new Panel();
        remainingTextPanel.ID = Guid.NewGuid().ToString();
        remainingTextPanel.Style["display"] = "none";
        LiteralControl remainingText = new LiteralControl(myText.Substring(initialStringLength, myText.Length - initialStringLength));
        remainingTextPanel.Controls.Add(remainingText);
        this.Controls.Add(remainingTextPanel);

 Panel linkBtnPanel = new Panel(); 
        LinkButton lnkBtn = new LinkButton() {Text = "...", OnClientClick = "toggleDynamicText('" + remainingTextPanel.ID + "'); return false;" };
        lnkBtn.Font.Bold = true;
        linkBtnPanel.Controls.Add(lnkBtn);
        this.Controls.Add(linkBtnPanel);

そしてJSコード:

function toggleDynamicText(id) {
$ctrl = $('[id$=' + id + ']');
$(document).ready(function () { 
    $ctrl.toggle(1000);
});

}

4

1 に答える 1

0

コードを見ないと何が起こっているのかわかりませんが、jQuery を使用してコントロールにアクセスするには、次のようにします。

$("#<%=myElement.ClientID%>")

このように、.NET が ID として割り当てるものは問題ではありません。

于 2014-05-15T20:08:15.603 に答える