2017-04-06 3 views
0

Ich möchte sowohl Benutzerinformationen als auch Adressmodelle in derselben Ansicht anzeigen.So fügen Sie das Benutzer- und Adressmodell mithilfe von Entity Framework ein und zeigen es an

Das sind meine Code-Strukturen:

In Data Access Layer, ich habe Modellklassen:

User.cs:

public class User 
{ 
     [Key] 
     public int UserId { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string RestaurantName { get; set; } 
     public string PrimaryPhone { get; set; }  
} 

Location.cs:

public class Location 
{ 
      public int Id { get; set; } 
      public string Line1 { get; set; } 
      public string Line2 { get; set; } 
      public string City { get; set; } 
      public string State { get; set; } 
      public string Country { get; set; } 
      public string ZipCode { get; set; } 
      public User User { get; set; } 
} 

Also habe ich zwei getrennte Repositories für Benutzer- und Adressmodelle, die addieren und alle Funktionen bekommen, was perfekt funktioniert.

Jetzt möchte ich beide dieser Modellinformationen in der Ansicht zur gleichen Zeit angezeigt werden.

Wie kann ich beide in der gleichen Ansicht kombinieren. Ich kann es nicht tun. Ich kann es tun, aber das Ding wird beide in verschiedenen Ansichten angezeigt.

Jeder Rat würde geschätzt werden!

+0

Warum erstellen Sie keine ViewModel-Klasse und übergeben Sie die gesamte Klasse oder eine Liste der ViewModel-Klasse? – ViVi

+0

Ja, ich kann die VIew Model Klasse bestehen. Aber mein Problem ist, ich habe zwei Repositories wie UserRepo und AddressRepo, die das Einfügen von Daten separat durchführt. Mit dem ViewModel kann ich das Modell kombinieren. Das Problem ist jedoch, wie dieses Viewmodal in zwei separaten Repositories übergeben werden kann, um die Daten in der Datenbank zu speichern. – Marshall

+0

Warum verwenden Sie keinen Ajax-Post zurück zum Controller und speichern Daten in den 2 Repositories? – ViVi

Antwort

1

Verwenden Sie ein ViewModel. Ihr ViewModel könnte in etwa so aussehen:

Verwenden Sie das MyViewModel in Ihrer Ansicht. Ihr Controller akzeptiert ein MyViewModel-Objekt.

Sie können dann die Objekte LocationVm und UserVm von Ihrem viewModel an Ihr Repository übergeben.

+0

Also, wie man es passiert. Wenn ich das versuche, bekomme ich die folgende Ausnahme: "System.Collection.Generic.list kann nicht implizit in Projectname.Data.Models konvertiert werden.Benutzer – Marshall

+0

Ich ändere mein Ansichtsmodell von Benutzer und Standort zu IEnumerable und IEnumerable . Also, wenn ich es mache, geht dieser Fehler, aber ich komme mit einem anderen Problem in Aussicht. In der Ansicht heißt es, dass ** "IPrinciple keine Definition und keine Erweiterungsmethode enthält, die das erste Argument des Typs Iprincipe in View in mvc akzeptiert" ** – Marshall

+0

Dieses Problem wurde behoben, indem ein separates Viewmodel für die Indexansicht und die Erstellungsansicht erstellt wurde. Jetzt kann ich die Informationen sammeln. Aber ein Problem beim Eingeben der Daten. – Marshall

1

hinzufügen Noch eine Immobilie zu Ihrem Benutzermodell wie unten

- Modell Abschnitt

public class User 
{ 
public List<Location> location {get;set;} 
} 

- Controller-Abschnitt

public ActionResult Index() 
{ 
List<Location> loc= new List<Location>() { new Location{ City = "one" }, new 
Location{ City = "two" } }; 

List<User> user= new List<User>() { new User{ FirstName = "A", location = 
loc }, new User{ FirstName = "B" } }; 

return View(user); 
} 

- Ansicht Abschnitt

@model IEnumerable<YourSolutionName.Models.User> 

@foreach (var item in Model) 
{ 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.FirstName) 

     @{ 
      if (item.location != null) { 
     foreach(var i in item.location) 
     { 
      <h1>@i.City</h1> 
     } 
     } 
    } 
} 

Dies ist einer Indem wir sie verwenden, können wir zwei verschiedene Modelle in derselben Ansicht verwenden.

Wie bei der Demo habe ich statische Werte hinzugefügt, die Sie dynamisch mit Ihrem Kontextobjekt hinzufügen können. kann es Ihnen helfen. Vielen Dank

+0

Vielen Dank für die detaillierte Information. Ich bin in der Lage, die Daten im Viewmodel zu binden. Aber wenn ich create ankreuze, erhält das Viewmodel die Daten nicht, es erhält null Wert. Ich verstehe nicht, was schief geht – Marshall

+0

Ich meine, Sie versuchen, das zu sagen, müssen Sie Daten an Controller senden (senden). Ist es richtig? –

+0

Ja, jetzt kann ich die Daten erfolgreich in die Datenbank einfügen. Aber ich kann es nicht in der Indexansicht anzeigen. Darf ich wissen, wie es geht? Wenn ich das obige UserViewModel benutze, gibt es folgenden Fehler: ** "kann System.Collection.Generic.list nicht implizit in Projectname.Data.Models.User" konvertieren ** – Marshall

Verwandte Themen