2011-12-22 18 views
4

私は40-50のチェックボックスのコレクションをいくつか持っています。データベースの一意の値IDである各チェックボックスに属性 'attr-ID'を設定しました。どうすればC#コードの属性名でコントロールを取得できますか?私はページロードイベントのdB値に従ってチェックボックスのいくつかをチェックしたいと思います。チェックボックスを取得するC#のカスタム属性名によるコントロール

<input type="checkbox" id="rdCervical" attr-ID='111' runat='server' /> 
+1

runat = "server"属性を持っているのか、それとも単純なhtml要素ですか。 –

+0

HTML5では 'data-'で始まる属性が許可されていますが、他には独自のパーサーを書く必要があると思います。 –

+0

彼らはrunatサーバーを持っていますが、Cで制御IDを識別できません# – deepu

答えて

5
if (rdCervical.Attributes["attr-ID"] != null) 
{ 
     string id = rdCervical.Attributes["attr-ID"]; 
     rdCervical.Checked = true; 
} 

私はあなたがプログラム的にチェックボックスを追加していると仮定します。その場合は、コンテナ<div id="checkContainer" runat="server"></div>を作成し、その内部にすべてのチェックボックスを入れます。次に、checkContainer.InnerHtmlを使用して、そのコードをthis libraryと解析してください。ライブラリAPIを使用して属性別の要素を簡単に見つけることができます。方法は次のとおりです。SelectNodes

このライブラリがないと、HTML要素をコードから簡単にナビゲートすることはできません。

+0

多くのチェックボックスがあるので、チェックボックスIDはチェックできません。すべてのチェックボックスに共通の属性があります。どのチェックボックスをチェックする必要があるのか​​を特定する必要があります。 – deepu

+0

プログラムでチェックボックスを追加すると仮定します。その場合は、コンテナ '

'を作成し、その中にすべてのチェックボックスを入れてください。次に、 'checkContainer.InnerHtml'を使い、このコードをこのライブラリで解析します。ライブラリAPIを使用して、属性ごとに要素を簡単に見つけることができます。 http://htmlagilitypack.codeplex.com/ –

6

これは必要なものですか?

protected void Page_Load(object sender, EventArgs e) 
{ 
    var cb = FindControlByAttribute<HtmlInputCheckBox>(this.Page, "attr-ID", "111"); 

} 
public T FindControlByAttribute<T>(Control ctl, string attributeName, string attributeValue) where T : HtmlControl 
{ 
    foreach (Control c in ctl.Controls) 
    { 
     if (c.GetType() == typeof(T) && ((T)c).Attributes[attributeName]==attributeValue) 
     { 
      return (T) c; 
     } 
     var cb= FindControlByAttribute<T>(c, attributeName, attributeValue); 
     if (cb != null) 
      return cb; 
    } 
    return null; 
} 
+0

彼はサーバーコントロールを使用していませんが、HTMLコントロールは 'HtmlInputCheckBox' –

+1

これは彼が望むものですか? – Arion

+0

私はサーバーコントロールではなくhtmlコントロールを使用しています。 – deepu