一个视图中的两个模型

时间:2017-04-08 15:20:42

标签: c# asp.net-mvc

我有两个模型--Ksiazka.cs和Ludzie.cs,我有一个View Wypozyczone.cshtml,它提供了Ludzie.cs。

Ksiazka.cs

    public int Id { get; set; }
    public string Nazwa { get; set; }
    public string Autor { get; set; }
    public int Ilosc { get; set; }

Ludzie.cs

    public int Id { get; set; }
    public int IdKsiazki { get; set; }
    public string Imie { get; set; }
    public string Nazwisko { get; set; }
    public DateTime DataWyporzyczenia { get; set; }
    public DateTime DataOddania { get; set; }

Ksiazka.id = Ludzie.IdKsiazki

我需要让Nazwa回答IdKsiazki。

的Controler

public ActionResult Wypozyczone()
    {
        var model = _mojaBaza.Ludzie.ToList();
        return View(model);

我的观点

 <th>
        @Html.DisplayNameFor(model => model.IdKsiazki) //I want there Nazwa
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Imie)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Nazwisko)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.DataWyporzyczenia)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.DataOddania)
    </th>

3 个答案:

答案 0 :(得分:1)

创建另一个代表所需数据的类(某种视图模型)

'data.frame':   13 obs. of  20 variables:
$ mission.id                 : int  1 2 3 4 5 6 7 8 9 10 ...
$ mission.date               : Factor w/ 1 level "15/08/1943": 1 1 1 1 1 1 1 
1 1 1 ...
$ theater.of.operations      : Factor w/ 4 levels "CBI","ETO","MTO",..: 3 4 
3 3 4 4 4 4 3 3 ...
$ country                    : Factor w/ 2 levels "GREAT BRITAIN",..: 2 2 2 
2 2 2 2 2 2 2 ...
$ air.force                  : Factor w/ 4 levels "10 AF","12 AF",..: 2 3 2 
2 3 3 3 3 2 2 ...
$ aircraft.series            : Factor w/ 4 levels "A36","B17","B24",..: 1 3 
1 1 3 3 3 2 1 1 ...
$ mission.type               : Factor w/ 4 levels "OBJECTIVE BOMBING",..: 4 
1 4 4 1 1 3 1 4 4 ...
$ takeoff.base               : Factor w/ 2 levels "PONTE OLIVO AIRFIELD",..: 
1 2 1 1 2 2 2 2 1 1 ...
$ takeoff.location           : Factor w/ 2 levels "SICILY","UNKNOWN": 1 2 1 
1 2 2 2 2 1 1 ...
$ target.id                  : Factor w/ 6 levels "16140","3735",..: 4 6 5 1 
6 6 6 6 3 1 ...
$ target.country             : Factor w/ 5 levels "BURMA","GERMANY",..: 3 4 
3 3 5 4 4 4 3 3 ...
$ target.city.or.area        : Factor w/ 10 levels "BERLIN","COSENZA",..: 10 
6 2 3 5 4 8 8 9 3 ...
$ target.type                : Factor w/ 5 levels "AIRDROME","CITY AREA",..: 
4 3 4 4 5 4 4 1 4 4 ...
$ target.industry            : Factor w/ 3 levels "ARMAMENT AND ORDNANCE 
PLANTS",..: 3 3 3 3 3 3 3 3 3 1 ...
$ target.priority            : int  9 1 9 9 1 1 1 1 9 9 ...
$ target.latitude            : num  38.22 -7.17 39.27 38.43 -1.12 ...
$ target.longitude           : num  15.4 147 16.2 15.9 103.9 ...
$ altitude..hundreds.of.feet.: int  139 44 139 139 60 35 70 40 139 139 ...
$ source.id                  : Factor w/ 9 levels "11287","11326",..: 9 8 9 
9 3 7 1 2 9 9 ...
$ bomb.type                  : Factor w/ 2 levels "HIGH EXPLOSIVES",..: 1 1 
1 1 1 1 1 1 1 1 ...

在控制器中创建此“viewmodel”

public class LudzieKsiazka
{
    public Ludzie Ludzie { get; set; }
    public Ksiazka Ksiazka { get; set; }
}

然后在视图中使用此“viewmodel”

public ActionResult Wypozyczone()
{
    var model = _mojaBaza.Ludzie.FirstOrDefault();
    var ksiazka = _mojaBaza.Ksiazka.FirstOrDefault(kz => kz.Id = model.IdKsiazki);

    var viewmodel = new LudzieKsiazka { Ludzie = model, Ksiazka = kziazka };

    return View(viewmodel);
}

答案 1 :(得分:0)

如果您想在视图中使用多个模型,请使用Tuple

所以你的观点应该是这样的东西

@model Tuple<Ksiazka,Ludzie>
     <th>
        @Html.DisplayNameFor(tuple => tuple.Item1.Nazwa ) //I want there Nazwa
    </th>
    <th>
        @Html.DisplayNameFor(tuple => tuple.Item2.Imie)
    </th>
    <th>
        @Html.DisplayNameFor(tuple => tuple.Item2.Nazwisko)
    </th>
    <th>
        @Html.DisplayNameFor(tuple => tuple.Item2.DataWyporzyczenia)
    </th>
    <th>
        @Html.DisplayNameFor(tuple => tuple.Item2.DataOddania)
    </th>

答案 2 :(得分:0)

即使在您的问题中,您已指出2个型号,但您不需要两个型号。您的问题是您当前的实体模型没有关系的一对一导航属性。

只是听你的代码,因为它告诉你它需要什么:你的视图是要求来自另一个类的更多信息,所以你的视图需要一个模型,其中包含你拥有的两个模型的信息。在Ludzie课程中,您需要一个导航属性,以便它可以保存Ksiazka的信息:

public class Ludzie
{
    // You need this property
    public Ksiazka Ksiazka { get; set; }
}

然后,当您加载Ludzie时,您将可以访问Ksiazka。然后在您的视图中,您可以执行此操作:

// You can access Nazwa
@Html.DisplayNameFor(model => model.Ksiazka.Nazwa) 

您可以在导航属性上阅读更多here