1

我只是想传递一个列表并在视图中的表中动态显示它。我有一个主页模型和主页控制器,并且变量设置正确,但我不知道如何将它传递给视图。

我的模型如下所示:

 public class HomePageModel
 {
    [Display(Name = "First Name")]
    public string FirstName { get; set; }
    [Display(Name = "Last Name")]
    public string LastName { get; set; }
    [Display(Name = "ExtNum")]
    public string ExtNum { get; set; }
    [Display(Name = "PhoneDisplay")]
    public List<PhoneDisplay> PhoneDisplay { get; set; }
 }

这是控制器:

 public ActionResult Homepage(HomePageModel HpModel)
    {
        ViewBag.Welcome = "Welcome: ";
        ViewBag.FirstName = HpModel.FirstName;   
        ViewBag.LastName = HpModel.LastName; 
        ViewBag.Extlbl = "Extension: ";
        ViewBag.Ext = HpModel.ExtNum;
        ViewBag.Todaylbl = "Today:";
        ViewBag.Today = DateTime.Now;
        DBOps ops = new DBOps();
        HpModel.PhoneDisplay = ops.getDisplayInfo(HpModel.ExtNum);
        return View(HpModel);
    }

PhoneDisplay 是一个包含线路索引、描述字符串和 4 位数字的列表。每个用户将在此列表中至少有 1 个项目,最多 6 个。我能够传递其他参数并将它们显示在视图中,但我找不到传递列表并动态显示它的方法。

编辑 我做到了这一点,但仍然找不到列表项。

    @model AxlMVC.Models.HomePageModel
    <table>
    <caption style="font-weight:bold">Your Phone Information</caption>    
    <tr>
        <th>Line Index</th>
        <th>Display</th>
        <th>Extension Number</th>
    </tr>
    @{
    foreach (var item in Model.PhoneDisplay) //problems here
    {
     <tr>
        <td>
             @Html.Display(item.numplanindex)
        </td>
        <td>
             @Html.Display(item.display)
        </td>
        <td>
             @Html.Display(item.dnorpattern)
        </td>
     </tr>
    }
 }
    </table>

编辑 我调试了cshtml文件,foreach循环中的项目也被很好地传递了,但是表格没有显示在页面上,我能看到的项目也不是每列的标题和标题

在此处输入图像描述

4

1 回答 1

1

Html.Display如MSDN所述,显示“来自 ViewData 字典或模型的数据” 。这意味着它ViewData使用您传入的值或Model具有指定名称的属性在字典中搜索键。例如Display("test"),将搜索ViewData“test”键和Model名为 的属性test。由于您正在传递无法工作的属性值。您的选择是:

  • 直接输出值,@item.numplanindex。这将输出该值的字符串表示形式。
  • 使用Display,尽管不建议这样做。您可以Display("PhoneDisplay[1].numplanindex")显示numplanindex列表中第二项的属性。
  • 使用DisplayFor,喜欢DisplayFor(model => item.numplanindex)。这是一个强类型版本的Display. 它将显示值的字符串表示形式或类型的模板(如果有的话)。您还可以通过数据注释管理输出的显示方式,例如DisplayFormatAttribute.
  • 使用DisplayTextFor,喜欢DisplayTextFor(model => item.numplanindex)。此方法输出值的字符串表示形式。

由于您已经在模型上有数据注释,您可以像这样修改您的视图:@model AxlMVC.Models.HomePageModel

<table>
  <caption class="tableCaption">Your Phone Information</caption>
  <tr>
    <th>@Html.DisplayNameFor(model => model.PhoneDisplay[0].numplanindex)</th>
    <th>@Html.DisplayNameFor(model => model.PhoneDisplay[0].display)</th>
    <th>@Html.DisplayNameFor(model => model.PhoneDisplay[0].dnorpattern)</th>
  </tr>
  @{ 
  foreach (var item in Model.PhoneDisplay)
  {
    <tr>
      <td>@Html.DisplayTextFor(model => item.numplanindex)</td>
      <td>@Html.DisplayTextFor(model => item.display)</td>
      <td>@Html.DisplayTextFor(model => item.dnorpattern)</td>
    </tr>
  }
  }
</table>

如果不包含任何项目,该行@Html.DisplayNameFor(model => model.PhoneDisplay[0].numplanindex)也有效。PhoneDisplay只收集属性元数据,不执行这样的表达式。

于 2013-08-01T20:00:38.550 回答