получить доступ к двум моделям в представлении IEnumerable - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь получить доступ к двум моделям в одном представлении, в основном у меня есть две модели

Модель пользователя

namespace SLMDemo0.Models
{
    using System;
    using System.Collections.Generic;

    public partial class User
    {
        public int UID { get; set; }
        public string UserName { get; set; }
        public int PID { get; set; }
        public int LID { get; set; }
        public string SK { get; set; }
        public string Brand { get; set; }
        public string CN { get; set; }
        public string SN { get; set; }
        public string AT { get; set; }
        public string Ref { get; set; }
        public Nullable<System.DateTime> DC { get; set; }

        public virtual License License { get; set; }
        public virtual License License1 { get; set; }
    }
}

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

namespace SLMDemo0.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Product
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Product()
        {
            this.Licenses = new HashSet<License>();
        }

        public int PID { get; set; }
        public int VenID { get; set; }
        public string PName { get; set; }

        public virtual Vendor Vendor { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<License> Licenses { get; set; }
    }
}

ИУ меня есть подробное действие в пользовательском контроллере

public ActionResult Details(int S)
    {
        SLMEntitiesDB dbContext = new SLMEntitiesDB();
        var VL = (from U in dbContext.Users
                  join P in dbContext.Products
                  on U.PID equals P.PID
                  where P.PID == U.PID
                  select new UP()
                  {
                      UserO = U,
                      ProductO = P
                  }).Where(U => U.UserO.LID == S).ToList();

        return View(VL);
    }




     @model SLMDemo0.Models.UP

 @{
     ViewBag.Title = "Details";
 }

 <h2>License Details</h2>
 <p>
     @using (Html.BeginForm("Details", "Users", FormMethod.Get))
     {
         <b>Search By:</b>
         @Html.RadioButton("searchBy", "username") <text>Username</text>
         @Html.TextBox("Search") <input type="submit" value="Search" />
     }
 </p>

 <table class="table">
     <tr>
         <th>
             @Html.DisplayNameFor(model => model.UserO.UserName)
         </th>

         <th>
             @Html.DisplayNameFor(model => model.ProductO.PName)
         </th>
         <th>
             @Html.DisplayNameFor(model => model.UserO.SK)
         </th>
         <th>
             @Html.DisplayNameFor(model => model.UserO.Brand)
         </th>
         <th>
             @Html.DisplayNameFor(model => model.UserO.CN)
         </th>
         <th>
             @Html.DisplayNameFor(model => model.UserO.SN)
         </th>
         <th>
             @Html.DisplayNameFor(model => model.UserO.AT)
         </th>
         <th>
             @Html.DisplayNameFor(model => model.UserO.DC)
         </th>
         <th>
             @Html.DisplayNameFor(model => model.UserO.Ref)
         </th>
         <th></th>
     </tr>

     @foreach (var item in Model.ProductO)// issue is here 
     {
 <tr>
     <td>
         @Html.DisplayFor(modelItem => item.UserName)
     </td>


     <td>
         @Html.DisplayFor(modelItem => item.SK)
     </td>
     <td>
         @Html.DisplayFor(modelItem => item.Brand)
     </td>
     <td>
         @Html.DisplayFor(modelItem => item.CN)
     </td>
     <td>
         @Html.DisplayFor(modelItem => item.SN)
     </td>
     <td>
         @Html.DisplayFor(modelItem => item.AT)
     </td>
     <td>
         @Html.DisplayFor(modelItem => item.Ref)
     </td>
     <td>
         @Html.DisplayFor(modelItem => item.DC)
     </td>
     <td>
         @Html.ActionLink("Edit", "Edit", new { id = item.UID }) |
         @Html.ActionLink("Details", "Details", new { id = item.UID }) |
         @Html.ActionLink("Delete", "DelUL", new { L = item.UID }, new { 
onclick = "return confirm('Are sure you want to permanently
 delete this license ?');" })
     </td>
 </tr>
     }

Теперь в подробном представлении foreach есть проблема, заключающаяся в том, что оператор foreach не может работать с переменной типа Product, поскольку продукт не содержит общедоступного определения экземпляра для GetEnumerator '.

Ответы [ 3 ]

1 голос
/ 20 октября 2019

Ваш запрос должен быть таким:

public ActionResult Details(int S)
{
    SLMEntitiesDB dbContext = new SLMEntitiesDB();
    var VL = (from U in dbContext.Users
          join P in dbContext.Products
          on U.PID equals P.PID
          where P.PID == U.PID
          select new UP(){
              UserO = U,
              ProductO = P
          }).Where(U => U.LID == S).ToList();

    return View(VL);
}

, а модель должна быть

public class UP
{
    public User UserO { get; set; }
    public Product ProductO { get; set; }
}
0 голосов
/ 20 октября 2019

Спасибо, ребята, это работает в представлении, как показано ниже

@model IEnumerable<SLMDemo0.Models.UP>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.UserO.UserName)
        </th>
0 голосов
/ 20 октября 2019

Удалить IEnumerable из UP

@model SLMDemo0.Models.UP
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...