我会尽量保持这一点。我是MVC的新手。
我有一个Controller,它创建一个时隙列表(如一个时间表),并将其放入ViewData中。我知道怎么做。
我知道如何使用@Html.DropDownList
在下拉菜单中显示此数据,例如我的创建页面包含以下内容:
@Html.DropDownList("TimeSlot", ViewData["TimeSlotsList"] as List<SelectListItem>)
@Html.ValidationMessageFor(model => model.TimeSlot)
我的问题出在我的索引视图上,显示modelItem => item.TimeSlot
并显示时间段的值,(1,2,3,4等)
@Html.DisplayFor(modelItem => item.TimeSlot)
我想从ViewData[TimeSlotsList]
列表中显示索引的TEXT值。显然,索引将是modelItem => item.TimeSlot
的值。
我知道如果TimeSlots在数据库中是它自己的表会更容易,但它没有以这种方式设置,而且此时我无法改变而不会导致各种各样的迁移问题,等等。
如果有人知道如何做到这一点或者能指出我正确的方向,我们非常感激!我尝试了一些不同的想法,但还没有任何工作.....
编辑:
我使用此功能在控制器中创建时隙列表:
private List<SelectListItem> CreateTimeSlotsList()
{
//Build Time Slot Drop Down
List<SelectListItem> li1 = new List<SelectListItem>();
li1.Add(new SelectListItem { Text = "10-10:50am, Tues Mar. 17", Value = "1" });
li1.Add(new SelectListItem { Text = "11-11:50am, Tues Mar. 17", Value = "2" });
li1.Add(new SelectListItem { Text = "1:10-2pm, Tues Mar. 17", Value = "3" });
li1.Add(new SelectListItem { Text = "2:10-3pm, Tues Mar. 17", Value = "4" });
li1.Add(new SelectListItem { Text = "3:30-4:20pm, Tues Mar. 17", Value = "5" });
li1.Add(new SelectListItem { Text = "8:30-9:20am, Wed Mar. 18", Value = "6" });
li1.Add(new SelectListItem { Text = "9:30-10:20am, Wed Mar. 18", Value = "7" });
li1.Add(new SelectListItem { Text = "11-11:50am, Wed Mar. 18", Value = "8" });
li1.Add(new SelectListItem { Text = "1:10-2pm, Wed Mar. 18", Value = "9" });
li1.Add(new SelectListItem { Text = "2:10-3pm, Wed Mar. 18", Value = "10" });
li1.Add(new SelectListItem { Text = "Hands On/Demo", Value = "99" });
ViewData["timeSlots"] = li1;
return (li1);
}
然后我用
ViewData["TimeSlotsList"] = CreateTimeSlots();
我想显示上面列表索引的TEXT值。
答案 0 :(得分:2)
这不是很好,但是:
TimeSlotList
; TimeSlotList
中仍有ViewData
; ...然后你可以尝试这样的事情:
@Html.DisplayFor( modelItem =>
((List<SelectListItem>) ViewData["TimeSlotsList"])
.Single(sli => sli.Value==modelItem.TimeSlot)
.Text)
ETA:但你知道我会做什么吗?我将为TimeSlot
对象创建一个模型,按照您在CreateTimeSlots
函数中的方式填充它们的主列表,然后按照模型对象的方式从数据层返回它你得到了。基本上,模拟主TimeSlot
表。
然后我会用它来
TimeSlotsList
和ViewModel
,其中包含主列表中的TimeSlot
对象。 然后,您可以执行以下操作:
@Html.DisplayFor(modelItem => item.TimeSlot.TimeSlotDescription)
...在您的索引页面上。