2017-07-07 4 views
0

ich diesen Code hatte und es funktionierte gut:ASP.NET MVC Zwei Modelle in ove Ansicht, Codeänderung

@model IEnumerable<Moviestore.Models.Movie> 
@{ 
ViewBag.Title = "Index"; 
} 

<p> 
@Html.ActionLink("Create New", "Create") 
</p> 
<table class="table"> 
<tr> 
    <th> 
     @Html.DisplayNameFor(model => model.Title) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.Genre) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.Author) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.Year) 
    </th> 
    <th></th> 
</tr> 

@foreach (var item in Model) { 
if (item.IsDeleted == 0) 
{ 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.Title) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Genre) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Author) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Year) 
    </td> 
    <td> 
     @Html.ActionLink("Edit", "Edit", new { id = item.MovieID }) | 
     @Html.ActionLink("Details", "Details", new { id = item.MovieID }) | 
     @Html.ActionLink("Delete", "Delete", new { id = item.MovieID }) 
    </td> 
</tr> 
} 
} 
</table> 

Aber ich brauchte ein weiteres Modell hinzuzufügen, ich getan, dass mit Tuple Auf diese Weise:

@using Moviestore.Models; 
@model Tuple<Movie, User> 

@{ 
ViewBag.Title = "Index"; 
} 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table class="table"> 
<tr> 
    <th>   
     @Html.DisplayNameFor(tuple => tuple.Item1.Title) 
    </th> 
    <th> 
     @Html.DisplayNameFor(tuple => tuple.Item1.Genre) 
    </th> 
    <th> 
     @Html.DisplayNameFor(tuple => tuple.Item1.Author) 
    </th> 
    <th> 
     @Html.DisplayNameFor(tuple => tuple.Item1.Year) 
    </th> 
    <th></th> 
</tr> 


@foreach (var item in Model) { 
if (item.IsDeleted == 0) 
{ 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.Title) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Genre) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Author) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Year) 
    </td> 
    <td> 
     @Html.ActionLink("Edit", "Edit", new { id = item.MovieID }) | 
     @Html.ActionLink("Details", "Details", new { id = item.MovieID }) | 
     @Html.ActionLink("Delete", "Delete", new { id = item.MovieID }) 
    </td> 
</tr> 
} 
} 
</table> 

Aber jetzt habe ich ein Problem mit der unteren Hälfte des Codes. Von @foreach

Ich weiß nicht, was ich statt @foreach (var Artikel in Modell)

Und wird dann @ Html.DisplayFor (ModelItem =>Artikel setzen müssen. Titel) brauchen auch einige Änderungen.

Sorry für lange Post, versuchte ich, das Problem so gut wie ich kann zu erklären.

+1

Der geeignete Weg, um mit dieser Situation umzugehen (benötigt mehr als ein Modell auf einer bestimmten Ansichtsseite), ist die Verwendung eines ViewModels, das die von Ihnen benötigten Modelle enthält. –

+0

Ja. Wenn Sie die Modelle m1 und m2 für Ihre Ansicht verwenden möchten, erstellen Sie ein anderes Modell (vm) mit Mitgliedern für m1 und m2. – MKR

Antwort

1

Wie ich in den Kommentaren erwähnt habe, ist der richtige Weg, um diese Situation zu bewältigen (benötigt mehr als ein Modell auf einer bestimmten Ansichtsseite), ein ViewModel, das die benötigten Modelle enthält (siehe here for reference).

Um Ihre spezifische Frage zu beantworten, können Sie jedoch auf jedes Element des Tupel an seiner Position zugreifen, z. wenn Ihr Modell Tuple<Movie, User> ist, dann können Sie das Filmobjekt zugreifen, indem model.Item1 und das Benutzerobjekt durch model.Item2 usw.

Aber ich empfehlen Ihnen dringend, den Ansichtsmodell Ansatz, die ich stattdessen verknüpft.

0

Hallo hier ist das Viewmodel für Ihre Anforderung:

public class MovieUserViewModel 
{ 
    public IEnumerable<Movie> Movie { get; set; } 
    public IEnumerable<Users> Users { get; set; } 
} 

Mit dem obigen Ansichtsmodell, können Sie einfach jede Klasse zugreifen

@foreach (var item in Model.Movie) 

@foreach (var item in Model.Users) 

Zusätzliche Informationen: Understanding ViewModel in ASP.NET MVC

Dank

Karthik

Verwandte Themen