将列表传递给.NET中的控制器进行查看

时间:2013-08-01 18:20:15

标签: asp.net-mvc razor

我只是想传递一个List并在View中的表中动态显示它。我有一个主页模型和主页控制器,并且变量设置正确,但我无法弄清楚如何将其传递给视图。

我的模型看起来像这样:

 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循环中的项目也正常传递,但是表格没有在页面上显示,所有我能看到的项目都不是每个列的标题和标题

enter image description here

1 个答案:

答案 0 :(得分:1)

Html.Display显示“来自ViewData词典或来自模型的数据”,如MSDN所述。这意味着它会在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也可以使用。仅收集属性元数据,不执行表达式。