【问题标题】:View without iterating through IEnumerable model C#无需遍历 IEnumerable 模型 C# 即可查看
【发布时间】:2016-06-22 18:15:55
【问题描述】:

我是 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>

student partial 必须有一个 for each 循环遍历模型数据和显示。 我无法将我的模型绑定到查看和显示数据,因为我的主视图需要一个模型来显示属性的文本框,而部分视图需要一个 IEnumerable 模型。我试过了 @Html.Partial("_studentPartial", new IEnumerable<.solution.viewmodel>) 但不起作用。有人可以提出解决方案吗?

【问题讨论】:

  • 如果显示的视图有一个单个实例的模型,你希望如何导出一个list?你可以把一篮子苹果变成一个个苹果,但你不能把一个个苹果变成一篮子苹果。此外,您不能创建 interfacenew 实例,只能创建 class
  • 您显示的视图暗示模型是单个实例,而不是集合。如果模型是一个集合,为什么需要将它转换为内部视图中的集合?这没有任何意义。
  • 如果模型是一个集合,那么这个视图中已经存在的任何 HTML 助手如何工作?似乎还存在对模型上根本没有的属性的引用,并且模型似乎具有多个同名的属性。由于多种原因,此代码甚至无法编译。您可能需要备份一下并返回一些 MVC 教程。
  • "could you suggest a way to implement my requirement" - 这是一个非常广泛的问题。 Stack Overflow 可以帮助回答特定问题,但不能为您提供根据您的需求定制的完整教程。老实说,您在这里拥有的是一堆由于多种原因无法工作的代码。除非您掌握了基础知识,否则不会发生“实现您的要求”。不要只是潜入并构建一个没有经验的复杂页面。从小处着手,逐步完善,一次只做一个小功能。
  • 好吧!!我没有要求定制教程。如果我不清楚,我的要求只是在主视图上有模型并将 IEnumerable 模型传递给局部视图。我只是想问一下这是否可能?感谢您的建议。

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


【解决方案1】:

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

如果主视图绑定到IEnumerable&lt;ViewModel&gt;,则将部分视图绑定到ViewModel

然后在你的主视图中,

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

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 2013-09-23
    • 2013-09-15
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多