2016-01-07 3 views
-3

Я хотел бы получить Unit_Price и Quantity to ActionResult Index.как читать данные из ViewModel

любая помощь оценили

Модель продукта

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; } 

} 

Модель

Детали изделия
[Table("Product_Details")] 
public class ProductDetails 
{ 
    public ProductDetails() 
    { 

    } 
    [Key] 
    public int ID { get; set; } 
    //[ForeignKey("Product")] 
    public int ID_Product { get; set; } 
    [Column(TypeName ="money")] 
    public decimal Unit_Price{ get; set; } 
    public int Quantity { get; set; } 
    public float Vat { get; set; } 
    public string Description { get; set; } 
    [Column(TypeName = "money")] 
    public decimal Gross_Value { get; set; } 
    [Column(TypeName = "money")] 
    public decimal Net_Value { get; set; } 
    // ID_Product 
    public virtual Product Product { get; set; } 
} 

ViewModel Producty

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; } 

} 

Контроллер продукта

[Authorize] 
public class ProductController : Controller 
{ 
    // GET: Product 
    private Context db = new Context(); 
    public ActionResult Index() 
    { 

     var _product = db.Producty .Include(x => x.Categories) 
            .Include(x => x.Subcategories) 
            .OrderBy(x => x.Categories.Name_Category) 
            .ToList(); 

     var _category = db.Categories.ToList(); 
     var _subcategory = db.Subcategories.ToList(); 

     var _price = db.Producty .Join(db.ProductyDetails, 
            sc => sc.ID_Product, 
            soc => soc.ID_Product, 
            (sc, soc) => new 
            { 
             Product = sc, 
             ProductDetails = soc 
            }).Select(soc => new { 

             Cena = soc.ProductDetails.Unit_Price, 
             Quantity = soc.ProductDetails.Quantity 
            }).ToList(); 


     var _productDetails = db.ProductyDetails.Include(x => x.Unit_Price) 
                .Select(x => x.Unit_Price) 
                .ToList(); 
     var vm = new ProductViewModel() 
     { 
      //Categories = _category, 
      //Subcategories = _subcategory, 
      Producty = _product, 
      //ProductyDetails = _price 
      //ProductyDetails =_productDetails 

     }; 

     return View(vm); 

Index Просмотр продукта

@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> 

Я перепробовал много способов, следовательно, эти комментарии в коде может быть что-то, что будет полезно.

enter image description here

+0

какая-то определенная проблема? вы показали нам кучу кода, но не сказали нам, в чем проблема. – user1666620

+0

Я не знаю, как отображать в ViewModel цена и количество в действии Индекс – MartinusP

+0

Дополнительная информация. Что именно происходит с вашей реализацией? – user1666620

ответ

1

Product имеет коллекцию ProductsDetails в это определение.

Вы пробегаем по коллекции продуктов здесь

@foreach (var _product in Model.Produkty) 

, но в пределах этого цикла вы затем сделать следующее

@foreach (var _cena in Model.ProductyDetails) 

, который, честно говоря, не имеет особого смысла, так как это будет просто показать все детали продукта.

Вместо этого, вы просто должны показать ProductDetails в вашем _product объекта:

@foreach (var _cena in _product.ProductsDetails) 

По крайней мере, я думаю, что это то, что происходит.

0

Первый вопрос, который я заметил, что я доверяю копия над типа О, находится на одной линии вашей Посмотреть индекс продукта находится на линии 1. Оно должно быть:

@model CRM_Hurtownia.ViewModels.ProductViewModel 

не

@model CRM_Hurtownia.ViewModels.ProduktViewModel 

Другой вопрос, я заметил, что в вашем Посмотреть индекс продукта, линии 15, 1 8 и 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; } 
} 

Другой вопрос был с Еогеасп заявление в the, Просмотреть индекс продукта. В VM нет свойства, которое равно Produkty, должно было быть Producty.

@foreach (var _product in Model.Producty) 

Если бы это было, теперь я смущен, потому что это выглядит как Producty используют свойства из Модели продукта, класс продукта. Если это так, то вам необходимо либо

1)

изменить класс в, Модель продукта, из, продукта, чтобы, Producty. Изменение строки 1 и 3, чтобы быть:

public class Producty 
{ 
    public Producty() 
    { 

2) или вы можете изменить Еогеасп в продукта Index View к:

@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; } 
} 

если вы измените это так, то в строке 9 в продукте контроллер, вы должны изменить его, чтобы быть:

var _product = db.Product .Include(x => x.Categories) 

снова, в строке 17 ваш контроллер продукта, он ссылается на ProductyDetails класс. Этот класс не существует. Я предполагаю, что вы должны иметь его как ProductDetails? Измените его следующим образом:

var _price = db.Producty .Join(db.ProductDetails, 

Также проверьте синтаксис в строках 31 и 38.


Я бы probabably идти с первым вариантом, хотя:

изменить класс, Модель, from, Продукт, to, Продукт. Меньше работы.

ПРОВЕРЬТЕ СВОЙ СИНТАКСИС. Я не уверен, есть ли у вас другие логические ошибки.

+0

У меня были переменные на другом языке и перевод переменных имен на английский язык с помощью Replace, возможно, что-то не сработало. это, вероятно, не очень хорошая идея – MartinusP

Смежные вопросы