我试图学习MVC,并一直使用MVC 5(https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application)遵循Entity Framework 6代码入门,但将其更改为一个小小的饮料生成器程序(基本上精简了一部分,并使用我自己的想法尝试并学习)。

我已经创建了personController,Person(索引,创建,删除,详细信息和编辑)视图和以下列出的person类:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;


namespace DOSTeaDecider.Models
{
    public class Person
    {
        public int ID { get; set; }
        [DisplayName("First Name")]
        public string FirstName { get; set; }
        [DisplayName("Last Name")]
        public string LastName { get; set; }
        //public byte[] Photo { get; set; }
        [DisplayName("Biography")]
        public string bio { get; set; }
        [DisplayName("Drink Choice")]
        public string Drink { get; set; }
        [DisplayName("Sugar Amount")]
        public int Sugar { get; set; }
        [DisplayName("Milk Colour")]
        public string MilkColour { get; set; }
        [DisplayName("Milk Dosage")]
        public string MilkDose { get; set; }

    }
}


在我看来,我想根据模型中设置的属性来显示人员,因此我有类似以下内容的效果很好;但是在教程中,我关注他们正在使用PagedList,例如@model PagedList.IPagedList<ContosoUniversity.Models.Student>在视图中,然后他们可以从视图中调用PagedList.IPagedList的属性。我遇到的问题是,如果我在视图中包含两个@model声明,它不喜欢它,但是如果删除对人员模型的引用,则无法使用人员属性,例如model.LastName,如果我删除对PagedList.IPagedList的引用,则无法从中调用属性,例如Model.PageCount

@model IEnumerable<DOSTeaDecider.Models.Person>
@*@model PagedList.IPagedList<DOSTeaDecider.Models.Person>*@
@*@using PagedList.Mvc;*@
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm("Index", "Person", FormMethod.Get))
{
    <p>
        Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
        <input type="submit" value="Search" />
    </p>
}
<table class="table">
    <tr>
        <th>
            @Html.ActionLink("First Name", "Index", new { sortOrder = ViewBag.NameSortParm, currentFilter = ViewBag.CurrentFilter })
            @*@Html.DisplayNameFor(model => model.FirstName)*@
        </th>
        <th>
            @Html.DisplayNameFor(model => model.LastName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Drink)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Sugar)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.MilkColour)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.MilkDose)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Drink)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Sugar)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.MilkColour)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.MilkDose)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}

</table>
<br />
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount

@Html.PagedListPager(Model, page => Url.Action("Index",
    new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))


我曾尝试研究人员模型并创建对PagedList的引用,但到目前为止,我的努力失败了。我想我可能缺少一些简单的东西,但是我正在学习,这就是为什么我在这里提出要求,以便有人可以提出建议。

最佳答案

使用PagedList作为视图模型,尝试使用一些显式定义的对象显示实体的属性:

var sampleObject = Model.First();
@Html.DisplayNameFor(model => sampleObject.FirstName)


要么

@Html.DisplayNameFor(model => new Person().FirstName)


在这种情况下,您可以以标准方式使用PagedList。

关于c# - 在一个MVC View 中引用多个模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31511166/

10-10 09:33