查看而不迭代IEnumerable模型C#

时间:2016-06-22 18:15:56

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

我是MVC的新手,在尝试创建简单的UI时遇到了问题。我要在视图中显示模型并支持分页。 我的视图将显示每列以及列名称下方必须有文本框或下拉列表以执行数据过滤。

我的模型如下

 public class ViewModel : ViewModelBase
{
    public long Id { get; set; }

    [DisplayName("Name")]
    public string Name{ get; set; }

    [DisplayName("Full Name")]
    public string fullName{ get; set; }

    [DisplayName("State")]
    public string adressState{ get; set; }

    [DisplayName("Grade")]
    public string grade{ get; set; }

   public MultiSelectList grades{ get; set; }
   public MultiSelectList adressState{ get; set; }
   }

我正在传递IEnumerable模型进行查看,我的视图应如下所示

<div class="dataTable">
<table id="mainTable">
    <thead>
        <tr >
            <th ></th>
                @Html.HiddenFor(model => model.Id)
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.fullName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.address)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.grade)
            </th>
        </tr>
        <tr >
            <th>
                <img src="~/Images/someimage.png" alt="Options" height="25" width="25" />

            </th>
                @Html.HiddenFor(model => model.Id)
            <th>
                @Html.TextBoxFor(model => model.name, new { onkeyup = "handleKeyPress(event, this)", placeholder = "Search", @class = "TextBox searchProperties" })
            </th>
            <th>
                @Html.TextBoxFor(model => model.fullName, new { onkeyup = "handleKeyPress(event, this)", placeholder = "Search", @class = "TextBox searchProperties"})
            </th>
            <th>
                @Html.ListBoxFor(model => model.adressState, Model.adressStateItemList as MultiSelectList, new { onchange = "handleDropdownChange()", @id = "adressStateDropDown", 
                @class = "searchProperties" })

            </th>
            <th>
                @Html.ListBoxFor(model => model.gradeItem, Model.gradeItemList as MultiSelectList, new { onchange = "handleDropdownChange()", @id = "gradeDropDown",
               @class = "searchProperties" })
            </th>
        </tr>
    </thead>
    <tbody id="tableResults">
        @{Html.RenderPartial("_StudentPartial", Model);}
    </tbody>
</table>

学生部分必须有一个为每个循环通过模型数据和显示。 我无法绑定我的模型来查看和显示数据,因为我的主视图期望模型显示属性的文本框,而部分视图需要IEnumerable模型。我试过了     @ Html.Partial(“_ studentPartial”,新的IEnumerable&lt; .solution.ViewModel&gt;) 但不起作用。有人可以提出解决方案吗?

1 个答案:

答案 0 :(得分:1)

如果部分视图的目的是显示单个项目,则不应将其绑定到IEnumerable。它应该绑定到单个模型实例。

如果主视图绑定到IEnumerable<ViewModel>,则将部分绑定到ViewModel

然后在主视图中,

foreach(var item in Model)
{
    @{Html.RenderPartial("_StudentPartial", item);}
}