2016-04-19 1 views
0

Je suis nouveau sur ASP.Net MVC. J'ai trois modèles Employee, Address, Store. Les structures sont les suivantes ...Plusieurs modèles dans une vue ASP.Net

EMPLOYEE:- 
    EmpID(PK), EmpName, Rank, StoreID, AddID 
STORE:- 
    StoreID(pk), BranchName, AddID 
ADDRESS:- 
    AddId(pk), Address, Phone, ID(fk EMPLOYEE.EmpID, fk STORE.StoreID) 

Comment utiliser les trois modèles dans un contrôleur et comment effectuer des opérations CRUD dans le contrôleur. Dans la vue de Employee, je veux montrer tous les champs des trois modèles, par ex. Lorsque je mets à jour ces champs dans la vue, tous les modèles doivent être mis à jour. Je sais si comment utiliser plusieurs modèles sans relation entre eux. Merci.

+2

écrire une classe avec 3 propriétés et chaque propriété est de type votre chaque modèle. Donc, cette classe enveloppe tous les 3 modèles utilisent cette classe d'emballage pour jouer avec. Et cette classe wrapper est appelée ViewModel dans MVC ... Utilisez ce viewModel pour transmettre les données du contrôleur à afficher. –

Répondre

4

C'est ici qu'un modèle de vue est pratique. Il vous permet de séparer les champs de couche de base de données et la logique de vos champs de couche de présentation.

Vous pouvez combiner plusieurs entités de base de données et n'exposer que les éléments de chacune d'elles que vous souhaitez afficher sur le frontal.

Par exemple, vous pouvez définir votre modèle de vue comme:

public class EmployeeInfo 
{ 
    public string EmployeeName {get;set;} 
    // other properties 

    public EmployeeInfo(Employee emp, Store store, Address address) 
    { 
     EmployeeName = emp.EmpName; 
     // assign other properties 
    } 
} 

Ensuite, dans votre contrôleur, vous pouvez créer le modèle de vue et de le transmettre à la vue:

public class EmployeeController 
{ 
    public IActionResult Index() 
    { 
     var empInfo = new EmployeeInfo(employee, store, address); // retrieved from database somehow 
     return View(empInfo); 
    } 
} 

Ensuite, votre vue peut référencer le modèle de vue et utiliser les propriétés comme vous le feriez normalement.

+0

'L'élément de modèle transmis dans le dictionnaire est de type 'Models.EmployeeDetails', mais ce dictionnaire nécessite un élément de modèle de tapez 'System.Collections.Generic.IEnumerable''1 [Models.EmployeeDetails]'. 'Cette erreur survient. J'ai fait 'publicInfo EmployeeInfo: IEnumarable'. – DhavalR

+0

Vous aurez probablement besoin de changer les types dans le constructeur pour correspondre, je faisais juste la démonstration du concept. – Steve

+0

Pouvez-vous s'il vous plaît me montrer un exemple? – DhavalR

0

employés ont relation avec l'adresse & Store,

Modèle

namespace Tester.Models 
{ 
    public class EMPLOYEEVIEWMODEL 
    { 
     public int EmpID { get; set; } 
     public string EmpName { get; set; } 
     public int Rank { get; set; } 
     public ADDRESSVIEWMODEL Address { get; set; } 
     public STOREVIEWMODEL Store { get; set; } 

    } 

    public class STOREVIEWMODEL 
    { 
     public int StoreID { get; set; } 
     public string BranchName { get; set; }  
    } 
    public class ADDRESSVIEWMODEL 
    { 
     public int AddId { get; set; } 
     public string Address { get; set; } 
     public string Phone { get; set; }   
    } 

} 

Contrôleur

namespace Tester.Controllers 
{ 
    public class EmployeeController : Controller 
    { 
     // 
     // GET: /Employee/ 

     public ActionResult Add() 
     { 
      return View(); 
     } 

    } 
} 

Voir

@using Tester.Models; 
@model EMPLOYEEVIEWMODEL 
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Add</title> 
</head> 
<body> 
    @using (Html.BeginForm()) 
    { 
     @Html.AntiForgeryToken() 
     <div class="form-group"> 
      @Html.LabelFor(model => model.EmpName, htmlAttributes: new { @class = "control-label col-md-4" }) 
      <div class="col-md-4"> 
       @Html.TextAreaFor(model => model.EmpName, new { @class = "form-control input-sm" }) 
       @Html.ValidationMessageFor(model => model.EmpName, "", new { @class = "help-block" }) 
      </div> 
     </div> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Rank, htmlAttributes: new { @class = "control-label col-md-4" }) 
      <div class="col-md-4"> 
       @Html.TextAreaFor(model => model.Rank, new { @class = "form-control input-sm" }) 
       @Html.ValidationMessageFor(model => model.Rank, "", new { @class = "help-block" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Store.BranchName, htmlAttributes: new { @class = "control-label col-md-4" }) 
      <div class="col-md-4"> 
       @Html.TextAreaFor(model => model.Store.BranchName, new { @class = "form-control input-sm" }) 
       @Html.ValidationMessageFor(model => model.Store.BranchName, "", new { @class = "help-block" }) 
      </div> 
     </div>} 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Address.Address, htmlAttributes: new { @class = "control-label col-md-4" }) 
     <div class="col-md-4"> 
      @Html.TextAreaFor(model => model.Address.Address, new { @class = "form-control input-sm" }) 
      @Html.ValidationMessageFor(model => model.Address.Address, "", new { @class = "help-block" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Address.Phone, htmlAttributes: new { @class = "control-label col-md-4" }) 
     <div class="col-md-4"> 
      @Html.TextAreaFor(model => model.Address.Phone, new { @class = "form-control input-sm" }) 
      @Html.ValidationMessageFor(model => model.Address.Phone, "", new { @class = "help-block" }) 
     </div> 
    </div> 
    <input id="Submit" type="submit" value="submit" /> 
</body> 
</html> 

jeter un regard bienveillant dans ce & laissez-moi savoir vos commentaires

0

En utilisant le modèle dynamique

modèles

public class Teacher 
{ 
    public int TeacherId { get; set; } 
    public string Code { get; set; } 
    public string Name { get; set; } 
} 

public class Student 
{ 
    public int StudentId { get; set; } 
    public string Code { get; set; } 
    public string Name { get; set; } 
    public string EnrollmentNo { get; set; } 
} 


Controller Code 

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewBag.Message = "Welcome to my demo!"; 
     dynamic mymodel = new ExpandoObject(); 
     mymodel.Teachers = GetTeachers(); 
     mymodel.Students = GetStudents(); 
     return View(mymodel); 
    } 
} 

Nous pouvons définir notre modèle comme dynamique (pas un modèle fortement typé) en utilisant le mot clé dynamique @model.

View Code 

    @using MultipleModelInOneView; 

    @model dynamic 

    @{ 

    ViewBag.Title = "Home Page"; 

    } 

    <h2>@ViewBag.Message</h2> 



    <p><b>Teacher List</b></p> 



    <table> 

    <tr> 

    <th>Id</th> 

    <th>Code</th> 

    <th>Name</th> 

</tr> 

@foreach (Teacher teacher in Model.Teachers) 

{ 

    <tr> 

     <td>@teacher.TeacherId</td> 

     <td>@teacher.Code</td> 

     <td>@teacher.Name</td> 

    </tr> 

} 

Liste des étudiants

Id code Nom Inscription Pas @foreach (Studen étudiant t Model.Students) { @ student.StudentId @ student.Code @ student.Name @ student.EnrollmentNo }