1

私はこのような画像を持っています:

<asp:Image runat="server" ID="btnabout1" ImageUrl="~/graphics/buttons/btnabout1.png" AlternateText="About" />

私はコードビハインドからコントロールにアクセスできます(明らかに):

btnabout1.Visible = false;

しかし、これは機能しません:

Page.FindControl("btnabout1").Visible = false;

重要なのは、変数controlIDを使用して属性を設定することです。

私はその方法を誤解していると思いますので、誰かが私を教えてくれませんか。


目的は、現在のページのファイル名を取得し、それに応じて画像/ボタンを表示/非表示に設定するメソッドを作成することです。このような:

string filename = System.IO.Path.GetFileName(HttpContext.Current.Request.FilePath);
string strippedfilename = filename.Substring(0, filename.IndexOf("."));
Page.FindControl("btn" + strippedfilename + "3").Visible = true;
Page.FindControl("btn" + strippedfilename + "2").Visible = false;
Page.FindControl("btn" + strippedfilename + "1").Visible = false;

Page.FindControlを機能させることができなかったため、

Dictionary<string, Control[]>

代わりに、もちろん、新しいページを追加すると辞書に追加する必要があるため、それほど動的ではありませんが、今のところは問題ないと思います...

4

3 に答える 3

0

使用しているオーバーロードFindControlは、直接の子コントロールのみを調べます。それよりも深くネストされている場合、コントロールは見つかりません。

関数が通過する必要のあるネストのレベル数を指定できる別のオーバーロードがあります。これにより、(コストをかけて)パフォーマンスをより深く掘り下げることができます。

簡単にできるので、このシナリオでbtnabout1.Visible = false;使用する必要はありません。FindControl

于 2012-05-12T09:20:55.937 に答える
0

まず、FindControlメソッドは再帰的ではないと思います。このメソッドを使用するには、おそらく、パネルなどのすべての親コントロールを介して呼び出す必要があります。

マスターページを使用している場合は、次の方法を使用してみてください。

ContentPlaceHolder h = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolderName");
h.FindControl("");
于 2012-05-12T09:21:07.933 に答える
0

以下の方法を使用してください

Button btnAbout=(Button)Page.FindControl("btnAbout");
btnAbout.Visible=false;

これは、この方法を使用する正しい方法です。

于 2012-05-12T09:24:03.480 に答える