【问题标题】:C# using context from 2 models in one viewC# 在一个视图中使用来自 2 个模型的上下文
【发布时间】:2020-04-11 12:06:19
【问题描述】:

我需要帮助在一个视图中使用来自 2 个模型的上下文。我需要使用来自ZanrModel.csZanrIDIme

这里是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; }

    }
}

我想在我使用 KnjigaModel.cs 的视图中使用 ZanrdIDIme

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

是的,我想在Knjiga/Create.cshtml 中创建dropdown menu,用户可以在其中选择Zanr 他们想使用它。我有KnjigaZanr 的数据库,下面是它的图片:

dbo.Knjiga table

dbo.Zanr table

提前致谢!!!

【问题讨论】:

    标签: c# html asp.net-mvc database


    【解决方案1】:

    我认为最好的方法是创建一个 ViewModel 对象来包含两个模型对象的组合。

    将模型直接放在视图上并不是一个好习惯。

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

    【讨论】:

    • 不客气!如果答案为您解决,请将其标记为答案。或者点赞。
    • 你看不懂文章?,你能看懂英文吗?基本思想是创建一个包含两个模型的新类,您只能将一个类传递给视图。
    • 告诉我们您的难点和不明白的地方,我们很乐意为您提供帮助。
    • 我编辑了答案,并放了另一篇文章。我建议您按照第一个链接中的描述开始一个新项目,这样做将有助于您理解。我强烈建议您改进基础知识,编写一些代码并具体说明您在每一步中发现的问题。
    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多