C# с использованием контекста из 2 моделей в одном представлении - PullRequest
0 голосов
/ 11 апреля 2020

Мне нужна помощь, используя контекст из 2 моделей в одном представлении. Мне нужно использовать ZanrID и Ime из ZanrModel.cs

Вот код ZanrModel.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace WebApplication1.Models
{
    [Table("Zanr")]
    public class ZanrModel

    {
        [Key]
        public int ZanrID { get; set; }

        public string Ime { get; set; }

    }
}

Я хочу использовать ZanrdID и Ime в это представление, где я использую KnjigaModel.cs

@model IEnumerable<WebApplication1.Models.KnjigaModel>

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


<h2>Index</h2>

<a href="/Knjiga/Create" class="btn btn-warning">Dodaj novu knjigu</a>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.InventarniBroj)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Pisac)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Naslov)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.GodinaIzdavanja)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.MestoIzdavanja)
        </th>
        <th>
        </th>
        <th>
        </th>
        <th>
        </th>
    </tr>

    @foreach (var item in Model)
    {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.InventarniBroj)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Pisac)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Naslov)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.GodinaIzdavanja)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.MestoIzdavanja)
        </td>
        <td>
            <a href="/Knjiga/Izmeni/@item.KnjigaId" class="btn btn-warning">Edit</a>
        </td>
        <td>
            <a href="/Knjiga/Details/@item.KnjigaId" class="btn btn-primary">Details</a>
        </td>
        <td>
            <a href="/Knjiga/Delete/@item.KnjigaId" class="btn btn-danger">Delete</a>
        </td>
    </tr>
    }

</table>

И да, я хочу создать dropdown menu в Knjiga/Create.cshtml, где пользователи могут выбирать, какие Zanr они хотят использовать. У меня есть базы данных для Knjiga и Zanr, и вот их фотографии:

таблица dbo.Knjiga

enter image description here

dbo.Zanr стол

enter image description here

Заранее спасибо !!!

1 Ответ

1 голос
/ 11 апреля 2020

Я считаю, что лучший способ - создать объект ViewModel, содержащий два объединенных объекта Model.

Не рекомендуется помещать модель непосредственно в представление.

//New class outside the view.
Public class KnjigaZanrVM 
{
IEnumerable<KnjigaModel> Knjiga {get} 
IEnumerable<ZanrModel> Zanr {get}
}

//on the View
@model WebApplication1.ViewModel.KnjigaZanrVM

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
...
@foreach (var item in Model.Knjiga)
    {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.InventarniBroj)
        </td>
        <td>
...
foreach (var item in Model.Zanr)
    {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.ZanrID)
        </td>
        <td>
...

См. Ссылки:

https://www.c-sharpcorner.com/article/managing-data-with-viewmodel-in-asp-net-mvc/

https://www.aspsnippets.com/Articles/Pass-Send-Object-from-View-to-Controller-in-ASPNet-MVC.aspx

...