【问题标题】:ASP.Net Displaying Table using For each使用 For each 的 ASP.Net 显示表
【发布时间】:2015-11-09 11:28:41
【问题描述】:

我提前为我的格式道歉!

我正在学习一个教程 (Here),我正在尝试为类别创建一个详细信息页面,但我不想显示课程名称和等级,而是显示产品的 ID、品牌、名称、条形码和价格具有相同 CategoryId 的每个产品。

但是,我收到此错误:

“Inventory.Models.Category 不包含 'Category' 的定义,并且找不到接受类型为 'Invetory.Models.Category' 的第一个参数的扩展方法 'Category'”

类模型

public class Category {
    public int Id{get;set;}
    public string Name {get;set;}
    }
public class Product{
    public int Id{get;set;}
    public int CategoryId{get;set;}
    public String Brand {get;set;}
    public String Name {get;set;}
    public decimal Price{get;set;
}

类别/详细信息.cshtml:

@model Inventory.Models.Category

@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>

<div>
    <h4>Category</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Name) <--ERROR HERE
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Name) <--ERROR
        </dd>
        <!--Test start-->
        <dt>
            @Html.DisplayNameFor(model => model.Category)
        </dt>
        <dd>
            <table class="table">
                <tr>
                    <th>Category</th>
                    <th>ID</th>
                </tr>
                @foreach (var item in Model.Category)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.Product.Name)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.ID)
                        </td>
                    </tr>
                }
            </table>
        </dd>
        <!--test end-->
    </dl>
</div>
<p>
    @Html.ActionLink("Edit", "Edit", new { id = Model.ID }) |
    @Html.ActionLink("Back to List", "Index")
</p>

产品.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;


namespace Inventory.Models
{
    public class Product
    {
        public int Id { get; set; }
        public int CategoryId { get; set; }
        public string Brand { get; set; }
        public string Name { get; set; }
        public string Barcode { get; set;}
        public decimal Price { get; set; }

        public virtual ICollection<Category> Categories { get; set; }
    }
}

Category.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Inventory.Models
{
    public class Category
    {
        public int ID { get; set; }
        public string Name { get; set; }

        public virtual Product Product { get; set; }
    }
}

【问题讨论】:

    标签: c# html .net asp.net-mvc


    【解决方案1】:

    好吧,你有很多问题,但让我们这样做

    1) 您的模型很可能是 Product 而不是 Category 所以将您的视图中的 @model Inventory.Models.Category 更改为 @model Inventory.Models.Product

    2) 产品模型中没有类别,所以添加

    public class Product
    {
        public int Id { get; set; }
        public int CategoryId { get; set; }
        public string Brand { get; set; }
        public string Name { get; set; }
        public string Barcode { get; set;}
        public decimal Price { get; set; }
    
        public Category Category { get; set; } // <--- Add this
    
        public virtual ICollection<Category> Categories { get; set; }
    }
    

    3) IEnumerable(即您循环的列表)称为类别而不是类别,因此将 @foreach (var item in Model.Category) 更改为 @foreach (var item in Model.Categories)

    【讨论】:

    • 我实际上同时拥有 Category/Details.cshtml 和 Product/Details.cshtml。我想要将很多产品分配给某些类别。例如,可口可乐有类别 ID 1,类别 id 1 与类别中的 ID 相关,即饮料。我实际上希望产品显示在我的类别 html 文件中。因此,当我在 Category.html 中按 Details 时,它将显示分配给该 categoryID 的所有产品的列表。
    • @JasonWan 那么类别与产品之间的关系是一对多还是多对多?
    • 多对多!因此,例如,我们在产品可乐中的类别 ID 为 1,它与类别中的饮料相关,ID 也是 1
    • 好的,所以我认为你应该做的是:1)首先让你的模型支持你想要的,即类别和产品模型都应该有一个 IEnumerable 集合,它们引用和这需要正确填充。 2)检查您正在调用的每个页面都存在于该模型中,即,如果您编写 model.X,那么模型应该具有公共 get 的属性
    • 如果你回头看!应用您告诉我的操作后,我会遇到该错误。
    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 2020-02-27
    • 1970-01-01
    • 2013-03-25
    • 2012-12-30
    • 2014-07-05
    • 2017-06-19
    • 1970-01-01
    相关资源
    最近更新 更多