繁体   English   中英

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

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

我会尽量保持简短。 我是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值。

这不漂亮,但是:

  • 如果您无权访问用于创建TimeSlotList时隙的文本描述;
  • 如果你仍然有TimeSlotListViewData索引页上;

...然后您可以尝试如下操作:

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

埃塔:但是你知道我会怎么做吗? 我将为TimeSlot对象创建一个模型,以您在CreateTimeSlots函数中执行的方式填充它们的主列表,然后以与获取模型对象相同的方式从数据层返回它们。 基本上,模拟一个主TimeSlot表。

然后我会用它来

  1. 建立您的TimeSlotsList ,然后
  2. 基于您的模型对象(包括主列表中的TimeSlot对象)构建ViewModel

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM