2016-04-19 2 views
0

Я новичок в ASP.Net MVC. У меня есть три модели Employee, Address, Store. Структуры следующие:Несколько моделей в одном представлении 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) 

Как использовать все три модели в одном контроллере и как выполнять операции CRUD в контроллере. На вид Employee я хочу показать все поля всех трех моделей, например.

EmpID, EmpName, Rank, Store.BranchName, Address, Phone 

Когда я обновляю эти поля в поле зрения, все модели должны быть обновлены. Я знаю, как использовать несколько моделей без взаимосвязи между ними. Спасибо.

+2

Написать класс с 3 свойства и каждое свойство имеет тип каждой вашей модели. Таким образом, этот класс обертывает все 3 модели, чтобы использовать этот класс-оболочку. Этот класс оболочки называется Called ViewModel в MVC ... Используйте этот viewModel для передачи данных с контроллера для просмотра. –

ответ

4

Здесь очень удобно использовать модель представления. Он позволяет отделять поля и логику уровня базы данных от полей уровня представления.

Вы можете комбинировать несколько объектов базы данных и выставлять только те элементы, которые вы хотите отобразить на лицевой стороне.

Например, вы можете определить вашу модель представления, как:

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

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

Затем в контроллере, вы можете создать модель представления и передать его мнению:

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

Тогда, ваше представление может ссылаться на модель представления и использовать такие свойства, как вы, как правило.

+0

'Элемент модели, переданный в словарь, имеет тип« Models.EmployeeDetails », но для этого словаря требуется элемент модели type 'System.Collections.Generic.IEnumerable''1 [Models.EmployeeDetails]'. 'Эта ошибка возникает. Я сделал 'public class EmployeeInfo: IEnumarable'. – DhavalR

+0

Возможно, вам нужно будет изменить типы конструктора, чтобы соответствовать, я просто демонстрировал концепцию. – Steve

+0

Не могли бы вы показать мне пример? – DhavalR

0

Сотрудник имеет отношения с адресом & магазин,

Модель

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; }   
    } 

} 

контроллер

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

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

    } 
} 

Посмотреть

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

Пожалуйста, смотрите в эту &, дайте мне знать ваше мнение

0

Использование Динамическая модель

Модели

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); 
    } 
} 

Мы можем определить модель как динамики (не сильно типизированных модели) с использованием ключевое слово @model dynamic.

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> 

} 

Student Список

Id Код Имя Зачисление Нет @foreach (Студень т студент Model.Students) { @ student.StudentId @ student.Code @ student.Name @ student.EnrollmentNo }
Смежные вопросы