ページに複数のリテラルがあります。例えば、
<asp:Literal id="Label1" runat="server" />
1 ページに約 10 個あり、すべて同じ値で埋めたいと考えています。各コントロールのIDを参照せずにそれを行う良い方法はありますか?
表示する値を保持するパブリック プロパティを作成し、aspx で使用します。
<%= propertyName %>
値を表示したい場所ならどこでも。
リソース ファイルを使用している場合は、meta:resourcekey 属性を 10 個すべての同じ値に設定できます。
あなたのラベルはどのように命名されていますか。Label1 - Label10 のような共通の命名規則がある場合は、次のことができます
for(int i = 1; i <= 10; i++)
{
Literal l = Page.FindControl(string.Format("Label{0}", i)) as Literal
if(l != null)
l.Text = "Whatever";
}
.Text =
名前が似ていない場合は、10 個の明示的なステートメントを使用する代わりに、ラベル名を配列に貼り付けてループすることができます。例えば
string [] litNames = new string [] { "litFirst", "otherLit", "someOtherVar" }
foreach(string s in litNames)
{
Literal l = Page.FindControl(s) as Literal
if(l != null)
l.Text = "Whatever";
}
私が見た唯一の方法は、ID をループ可能な名前 (例: Label1 - Label10) にし、ID を参照してループすることです。しかし、私たちは別の解決策のために一生懸命努力しませんでした!
リテラルは単一のコンテナ (たとえば、パネル) に配置されていますか、それともページに散らばっていますか? 関連性のない他のコントロールがあまり含まれていない単一のコンテナにある場合は、コンテナの Controls コレクションをループするのと同じくらい簡単です。
はい、ページもコンテナであることは十分承知していますが、ほとんどの場合、ページ内のすべてのコントロールをループするのは非常に非効率的です。まったくお勧めしません。