显示 MVC、Razor 中的 ViewData 项目列表中索引的文本值

Display the text value of an index from ViewData list of items in MVC, Razor

我会尽量保持简短。我是 MVC 新手。

我有一个控制器,它创建一个时间段列表(如时间表),并将其放入 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 在数据库中是它自己的 table,这会容易得多,但它不是这样设置的,在这个时候我不能改变,否则会引起各种问题迁移头痛等

如果有人知道如何执行此操作或可以指出正确的方向,我们将不胜感激!我尝试了一些不同的想法,但没有任何效果......

编辑:

我用这个函数在我的控制器中创建时隙列表:

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值。

这不是很漂亮,但是:

  • 如果您无法访问用于创建 TimeSlotList 的时间段的文本描述;
  • 如果您在索引页的 ViewData 中仍然有 TimeSlotList

...那么您可以尝试这样的操作:

 @Html.DisplayFor( modelItem => 
     ((List<SelectListItem>) ViewData["TimeSlotsList"])
     .Single(sli => sli.Value==modelItem.TimeSlot)
     .Text)

ETA:但你知道我会做什么吗?我会为 TimeSlot 对象创建一个模型,按照您在 CreateTimeSlots 函数中的方式填充它们的主列表,并按照您的方式从数据层中填充 return你得到的模型对象会是什么。基本上模拟一个高手TimeSlottable.

然后我会用它来

  1. 建立你的TimeSlotsList
  2. 根据您的模型对象构建一个 ViewModel,其中包括主列表中的一个 TimeSlot 对象。

然后,您可以执行以下操作:

@Html.DisplayFor(modelItem => item.TimeSlot.TimeSlotDescription)

... 在您的索引页上。