C# コード ビハインド ファイルから ID で div 要素にアクセスしようとしている ASP.NET サイトがあります。基本的に、div 要素が存在するかどうかを確認し、存在する場合はそのプロパティを変更します。
さまざまな解決策を示す多くのリソースを見つけましたが、どれも機能していないようです。
ASP.Net ページの HTML:
<div class="contentArea">
<div class="block" id="button1" runat="server">
Some Content Here
</div>
<div class="block" id="button2" runat="server">
Some Content Here
</div>
<div class="block" id="button3" runat="server">
Some Content Here
</div>
</div>
C# コード ビハインド (私が試した例):
System.Web.UI.HtmlControls.HtmlGenericControl div1 = (System.Web.UI.HtmlControls.HtmlGenericControl)this.FindControl("button1");
div1.Attributes["class"] = "classNameHere";
また
Control div1 = this.FindControl("button1");
div1.GetType();
コードが上記の各例の 2 行目に到達すると、エラーが発生します。
オブジェクト参照がオブジェクト インスタンスに設定されていません。
次のことを試してみると:
if (div1 != null)
{
// Do Something;
}
div1 は常に null に設定されているため、何も起こりません。皮肉なことに、[Locals] ウィンドウを見てこれを調べると、リストに button# ID が表示されているので、それらが存在することはわかっていますが、システムはコントロールが見つからないように動作しています。
私の最終的な目標は、ボタン div の最大 ID 番号を見つけることです (私の HTML の例を見ると、最大 ID は 3 (button3) になります。もっと良い方法があるかもしれませんが、いずれにしても、最大ID、各divに触れていくつかのcssプロパティを変更できるようにしたい.
これらはすべて jQuery を使用して簡単に実行できますが、この例では C# で実行する必要があります。
どんな助けでも大歓迎です。さらに情報が必要な場合は、お知らせください。
更新 新しい C# Web プロジェクトをゼロから作成しました。マスターページを追加し (変更せずに)、マスターページを使用して Web フォームを追加した後、コンテンツ ID="Content2" の下の Web フォームに 1 行だけ追加しました。
<div id="button1"></div>
C# コード ビハインドから、以前とまったく同じ問題が発生します。
最終更新と回答 上記の更新で誰も (私自身を含め) 私の間違いに気付かなかったことにショックを受けました。div の下にゼロから新しいプロジェクトを作成したときに、runat="server" を入れたことはありません。新しいプロジェクトで問題を最初から修正した方法は次のとおりです。
runat="server" を div に追加します。
<div id="button1" runat="server"></div>
次に、MasterPage の下の ContentPlaceHolder で FindControl を実行しました。
ContentPlaceHolder myPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
注: デフォルトで作成された Site.Master ページの ContentPlaceHolder コードは次のようになります。
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
コード ビハインドでこの ContentPlaceHolder を見つけた後、このプレースホルダー内で button1 を検索しました。
using System.Web.UI.HtmlControls;
HtmlControl myControl = (HtmlControl)myPlaceHolder.FindControl("button1");
最後に、myControl が null かどうかを確認します。
if (myControl != null)
{
\\ Do Something
}
このコードを実行すると、探していた div が見つかりました。すべてをまとめた完全なコードは次のとおりです。
using System.Web.UI.HtmlControls;
ContentPlaceHolder myPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
HtmlControl myControl = (HtmlControl)myPlaceHolder.FindControl("button1");
if (myControl != null)
{
// Do Something
}