2つのIEnumerableの値を使用する必要があるループがあります。現在のインデックスと値を "labels"にする必要があります。それぞれ。IEnumerableループの現在のインデックス+値の取得
public static string CheckBoxList(this HtmlHelper htmlhelper, IEnumerable<string> values, IEnumerable<string> labels, string name, IDictionary<string, object> HtmlAttributes)
{
if (labels == null)
return "";
StringBuilder sb = new StringBuilder();
string[] modelValues = new string[] {};
ModelState modelState;
if(htmlhelper.ViewData.ModelState.TryGetValue(name, out modelState)) {
modelValues = ((string[])modelState.Value.RawValue);
}
foreach(string s in values)
{
bool isChecked = modelValues.Contains(s);
sb.Append(CreateCheckBox(name, s, isChecked, HtmlAttributes));
sb.Append(" <label for=\"" + name + "\"> " + labels + "</label><br />");
}
return sb.ToString();
}
このループの「ラベル」の現在の値を印刷するにはどうすればよいですか?また、私は "インデックス"、ラベルが動作するようにチェックボックスの一意のIDを構築する必要があります。
ありがとうございます。 /M
'IEnumerable'はインデックスで要素を取り出すこともサポートしていません。最初にリストに変換する必要があります(例えば、 'ToList'拡張メソッドを使用して)。 –
'Count()'メソッドを使うとパフォーマンスが低下する可能性があります:シーケンスに 'ICollection'が実装されていない場合、 'Count()'はすべての要素を反復処理する必要があります。 'for'ループ! –
LukeH
@FredrikMörk - Linq名前空間は '[i]'を置き換えることができる拡張メソッド 'ElementAt()'を提供します。とにかく括弧を使ったのは間違いでした。 – RaYell