チェックボックスセレクター、いくつかの文字列で満たされた、入力されたエンティティがあります。div構造のループで(行ごとに)線形に構築する必要があります。
エンティティ:
public class Hours
{
[Key]
public int SliceID { get; set; }
public string SliceName { get; set; }
public string Slice { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public bool Selected { get; set; } //if slice is checked by user on search screen
}
表示用にすべてのタイム スライスを収集するアクション:
public ActionResult Search_Times()
{
int iInstId = 1;
Test.Models.DataLayer db = new Test.Models.DataLayer();
Test.Models.TestDB context = new Models.TestDB();
IEnumerable<Test.Models.Hours> lst = db.GetSlices(context, iInstId).OrderBy(a => a.SliceID);
// ViewBag.SliceList = lst;
return View(lst);
}
これらのフィールドをボディ ページの特定の部分にレンダリングし、途中でいくつかのクラス/div フォーマットを適用したいと考えています。
たとえば、 EditorForModel を使用する場合:
メインページ:
@model IEnumerable<Test.Models.Hours>
@Html.EditorForModel()
Hours EditorTemplate で:
@model Test.Models.Hours
<div>
@Html.CheckBoxFor(
x => x.Selected,
new {
@class = "jcf-unselectable",
id = HtmlHelper.GenerateIdFromName("cb_slice." + ViewData.TemplateInfo.GetFullHtmlFieldName(""))
}
)
// this should be a label too, made for example to show text from data.
@Html.DisplayTextFor(x => x.SliceName)
@Html.LabelFor(
x=> x.StartTime,
new {
@class = "info"
})
@Html.LabelFor(
x => x.EndTime,
new {
@class = "info"
})
</div>
私の場合、 @Html.LabelFor は行のタイトルのみを表示し、データは表示しません (レンダリング後のソースビューの for="")。データを表示するが一般的なテキストである DisplayTextFor とは異なります。
この現在の方法を修正する方法が必要です。それに応じてモデルからのデータを操作するには、ラベルはフィールドの背後にあるデータを表示し、そのラベル内に必要なクラス、ID (必要な css/html に基づく) を生成できます。ループ。
ビューバッグ/テンプレート/など、これを行う最良の方法は何ですか?