C# 如何从ViewModel中读取数据

C# 如何从ViewModel中读取数据,c#,asp.net-mvc,entity-framework,linq,asp.net-mvc-5,C#,Asp.net Mvc,Entity Framework,Linq,Asp.net Mvc 5,我想得到单位价格和数量的ActionResult指数 谢谢你的帮助 模型产品 public class Product { public Product() { ProductsDetails = new HashSet<ProductDetails>;(); } [Key]//[Required] public int ID_Product { get; set; } [Required] public int

我想得到单位价格和数量的ActionResult指数

谢谢你的帮助

模型产品

public class Product
{
    public Product()
    {
        ProductsDetails = new HashSet<ProductDetails>;();
    }
    [Key]//[Required]
    public int ID_Product { get; set; }
    [Required]
    public int ID_Subcategory { get; set; }
    [Required]
    public int ID_Category { get; set; }
    // [StringLength(50)]
    public string Product_Name { get; set; }
    //public byte Photo_Products { get; set; }
    // ID_Subcategory

    //public virtual ProductDetails ProductDetails { get; set; }
    [ForeignKey("ID_Subcategory")]
    public Subcategory Subcategories { get; set; }

    [ForeignKey("ID_Category")]
    public virtual Category Categories { get; set; }
    public virtual ICollection<ProductDetails> ProductsDetails { get; set; }
    public virtual ICollection<OrderDetails> OrdersDetails { get; set; }

}
视图模型生产力

public class ProductViewModel
{
    public IEnumerable<Category> Categories { get; set; }
    public IEnumerable<Subcategory> Subcategories { get; set; }
    public IEnumerable<Product> Producty { get; set; }
    public IEnumerable<ProductDetails> ProductyDetails { get; set; }

}
查看产品索引

@model CRM_Hurtownia.ViewModels.ProduktViewModel

@{
    ViewBag.Title = "Product";
    ViewBag.active = "Product";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h4 class="page-title">Product</h4>

@Html.ActionLink("Create Product", "Create", null, new { @class = "btn m-r-5" })

<table class="table table-bordered table-hover tile">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Categories)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Subcategories)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Products)
        </th>
        <th>
            Price
        </th>
        <th>
            Quantity
        </th>

        <th></th>
    </tr>

    @foreach (var _product in Model.Produkty)
    {

        <tr>
            <td>
                @Html.DisplayFor(modelItem => _product.Categories.Name_Category)
            </td>
            <td>
                @Html.DisplayFor(modelItem => _product.Subcategories.Name_Subcategory)
            </td>
            <td>
                @Html.DisplayFor(modelItem => _product.Product_Name)
            </td>
            @*@foreach (var _cena in Model.ProductyDetails)
            {
            <td>
                @Html.DisplayFor(modelItem => _cena.Unit_Price)
            </td>
            <td>
                @Html.DisplayFor(modelItem => _cena.Quantity)
            </td>

            }*@


            <td>
                @Html.ActionLink("Edit", "Edit", new { id = _product.ID_Produkt }) |
                @Html.ActionLink("Details", "Details", new { id = _product.ID_Produkt }) |
                @Html.ActionLink("Delete", "Delete", new { id = _product.ID_Produkt })
            </td>
        </tr>

    }
</table>
我尝试了很多方法,因此在代码中添加了这些注释 也许这些东西会有用

产品在其定义中包含一个集合ProductsDetails

您正在此处循环浏览您的产品集合

@foreach (var _product in Model.Produkty)
但在这个循环中,您将执行以下操作

@foreach (var _cena in Model.ProductyDetails)
老实说,这没有多大意义,因为它只会显示所有的产品细节

相反,您应该只在_product对象中显示ProductDetails:


至少我认为这是正在发生的事情。

我注意到的第一个问题,我相信是o型的复制,在第1行,您的视图中的一个产品索引在第1行。 应该是:

@model CRM_Hurtownia.ViewModels.ProductViewModel
不是

我注意到的另一个问题是,在视图产品索引中,第15、18和21行需要在特定属性上使用DisplayNameFor。但是你必须为他们定义一个名字。。。 因此,进入产品视图模型,在每个属性上方添加以下内容:

[Display(Name = "Set Primary")]
它应该是这样的:

public class ProductViewModel
{
   [Display(Name = "Name for Categories")]
   public IEnumerable<Category> Categories { get; set; }
   [Display(Name = "Name for Subcategories ")]
   public IEnumerable<Subcategory> Subcategories { get; set; }
   [Display(Name = "Name for Producty ")]
   public IEnumerable<Product> Producty { get; set; }
   [Display(Name = "Name for ProductyDetails ")]
   public IEnumerable<ProductDetails> ProductyDetails { get; set; }
}
如果是这样的话,我现在很困惑,因为Producty似乎正在使用模型Product中的属性,即Product类。如果是,那么你需要

一,

将中的类、模型产品、从、产品更改为、Producty。将第1行和第3行更改为:

public class Producty
{
    public Producty()
    {
二, 或者,您可以将Product Index视图中的foreach更改为:

并将产品视图模型更改为:

同样,在产品控制器的第17行,它引用了ProductyDetails类。此类不存在。我猜你应该把它作为产品细节?将其更改为:

var _price = db.Producty    .Join(db.ProductDetails,
还要检查第31行和第38行中的语法

不过,我可能会选择第一个选项:

将中的类、模型产品、从、产品更改为、Producty。 减少工作量


检查语法。我不确定您是否还有其他逻辑错误。

到底是哪个部分给您带来了麻烦?您已经向我们展示了一系列代码,但没有告诉我们问题出在哪里。我不知道如何在ViewModel中显示价格和数量的更多信息。您的实现到底出了什么问题?我用另一种语言编写了变量,并通过替换将变量名翻译成英语,可能是因为某些操作不正常。这可能不是个好主意
[Display(Name = "Set Primary")]
public class ProductViewModel
{
   [Display(Name = "Name for Categories")]
   public IEnumerable<Category> Categories { get; set; }
   [Display(Name = "Name for Subcategories ")]
   public IEnumerable<Subcategory> Subcategories { get; set; }
   [Display(Name = "Name for Producty ")]
   public IEnumerable<Product> Producty { get; set; }
   [Display(Name = "Name for ProductyDetails ")]
   public IEnumerable<ProductDetails> ProductyDetails { get; set; }
}
@foreach (var _product in Model.Producty)
public class Producty
{
    public Producty()
    {
@foreach (var _product in Model.Product)
public class ProductViewModel
{
   [Display(Name = "Name for Categories")]
   public IEnumerable<Category> Categories { get; set; }
   [Display(Name = "Name for Subcategories ")]
   public IEnumerable<Subcategory> Subcategories { get; set; }
   [Display(Name = "Name for Producty ")]
   public IEnumerable<Product> Product { get; set; }
   [Display(Name = "Name for ProductyDetails ")]
   public IEnumerable<ProductDetails> ProductyDetails { get; set; }
}
var _product = db.Product .Include(x => x.Categories)
var _price = db.Producty    .Join(db.ProductDetails,