ddgjgj Ответов: 0

Как использовать DISTINCT внутри представления MVC ? !


Вот такой вид :

@model Northwind.Employee

@{
    ViewBag.Title = "Details";
    Layout = "~/Views/Shared/MasterDetailsLayoutPage.cshtml";
}

<h2>Details</h2>

<div>
    <h4>Employee</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.LastName)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.LastName)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.FirstName)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.FirstName)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Title)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Title)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.TitleOfCourtesy)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.TitleOfCourtesy)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.BirthDate)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.BirthDate)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.HireDate)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.HireDate)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Address)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Address)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.City)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.City)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Region)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Region)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.PostalCode)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.PostalCode)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Country)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Country)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.HomePhone)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.HomePhone)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Extension)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Extension)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Photo)
        </dt>

        <dd>
            @{

                byte[] photo = Model.Photo;
                string imageSrc = "image / jpeg";
                if (photo != null)
                {

                    MemoryStream ms = new MemoryStream();
                    ms.Write(photo, 78, photo.Length - 78);
                    string imageBase64 = Convert.ToBase64String(ms.ToArray());
                    imageSrc = string.Format("data:image/jpeg;base64,{0}", imageBase64);


                }
            }

            <img src="@imageSrc" alt="Image"  width="50" height="50"/>
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Notes)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Notes)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.PhotoPath)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.PhotoPath)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.Employee1.LastName)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.Employee1.LastName)
        </dd>

    </dl>
</div>


<h4>Customers</h4>
<p>
    @Html.ActionLink("Create New Customer", "Create", "Customers", new { id = Model.EmployeeID }, null)
</p>
<table class="table">
    <tr>
        <th>
            Customer ID
        </th>
        <th>
            Customer Name
        </th>

        <th></th>
    </tr>
    
    @foreach (var item in Model.Orders.Distinct<Order>())
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.CustomerID)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Customer.ContactName)
            </td>

            <td>
                @Html.ActionLink("Editt   ", "Edit", "Customers", new { id = item.CustomerID }, null)


                @Html.ActionLink("Detailss     ", "Details", "Customers", new { id = item.CustomerID }, null)


                @Html.ActionLink("Deletee    ", "Delete", "Customers", new { id = item.CustomerID }, null)


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

</table>







<p>
    @Html.ActionLink("Edit", "Edit", new { id = Model.EmployeeID }) |
    @Html.ActionLink("Back to List", "Index")
</p>



А это контролер :

public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Employee employee = db.Employees.Find(id);
            if (employee == null)
            {
                return HttpNotFound();
            }
            return View(employee);
        }



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

@foreach (var item in Model.Orders.Distinct<Order>())
   {


Что я уже пробовал:

Я только что объяснил эту проблему выше

CHill60

Конечно, именно в модели вы бы это сделали, или, на худой конец, в контроллере. Определенно не вид.

Измените запрос с вашего предыдущего вопроса на

Select DISTINCT E.LastName, E.FirstName, E.Title --,and some other employees fields
FROM Orders O
INNER JOIN Employees E ON O.EmployeeID = E.EmployeeID

ddgjgj

Сэр, но разве список клиентов тоже отображается таким образом, для каждого сотрудника, как вы думаете ,разве это не нормально?

куда теперь вставить этот запрос в контроллер ?

// GET: Employees / Details / 5
public ActionResult Details(int? id)
{
if (id = = null)
{
возврат нового HttpStatusCodeResult(HttpStatusCode. BadRequest);
}
Сотрудник = дБ.Сотрудников.Найти (id);
if (employee = = null)
{
return HttpNotFound();
}
обратный вид(сотрудник);
}

CHill60

1. Что запрос не отображать любую информацию поддержки.
2. Я тебе на твой предыдущий пост Запрос соединения между тремя таблицами[^] что запрос должен идти в Модель не контролер.
3. см. комментарий от F-ES Sitecore ниже.
4. Если вы отвечаете на комментарий, используйте  Ответить  кнопка, чтобы плакат был уведомлен о вашем ответе

ddgjgj

ЧТОБЫ ВСЕ БЫЛО ЯСНО, Я ТОЛЬКО ЧТО ОПУБЛИКОВАЛ ЗДЕСЬ НОВЫЙ ВОПРОС :

https://www.codeproject.com/Questions/1189186/Many-to-many-relationship-in-MVC-view

F-ES Sitecore

Чтобы немного пояснить то, что сказал CHill60, модель, которую вы используете (Сотрудник), не подходит для той цели, которую вы хотите использовать, поэтому вам нужно сделать что-то еще. Определите свой собственный класс модели, который имеет объект Employee, а также список объектов Customer (модель может быть сотрудником со списком в качестве его свойства, или модель может содержать как свойство Employee, так и свойство List ) . Затем вы получаете модель для построения самой себя из класса Employee базы данных, и модель извлечет всю необходимую информацию о сотрудниках, а затем получит отдельный список клиентов из коллекции Orders). Итак, все, что делает ваш контроллер, это что-то вроде

Mymodel model = new MyModel(id);

а конструктор MyModel получит соответствующего сотрудника из базы данных и соответствующим образом заполнит свойства так что ваше представление будет просто использовать

Модель.Работник

и

Модель.Клиенты

CHill60

Виртуальная 5

ddgjgj

ЧТОБЫ ВСЕ БЫЛО ЯСНО, Я ТОЛЬКО ЧТО ОПУБЛИКОВАЛ ЗДЕСЬ НОВЫЙ ВОПРОС :

https://www.codeproject.com/Questions/1189186/Many-to-many-relationship-in-MVC-view

0 Ответов