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

时间:2015-03-13 21:48:16

标签: c# asp.net-mvc asp.net-mvc-4 razor viewdata

我会尽量保持这一点。我是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值。

1 个答案:

答案 0 :(得分:2)

这不是很好,但是:

  • 如果您无权访问用于创建TimeSlotList;
  • 的时段的文字说明
  • 如果索引页面上的TimeSlotList中仍有ViewData;

...然后你可以尝试这样的事情:

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

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

然后我会用它来

  1. 构建您的TimeSlotsList
  2. 根据您的模型对象构建ViewModel,其中包含主列表中的TimeSlot对象。
  3. 然后,您可以执行以下操作:

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

    ...在您的索引页面上。