如何在mvc3中的单个视图中从两个表或两个类获取数据

时间:2012-08-27 11:14:44

标签: asp.net-mvc-3

如何在mvc3中的单个视图中从两个表或两个类获取数据。 我想显示两个表中的数据。 我有一个父类和两个子类。 即       公共类GetDocumentParent             {enter code here                 public List getDocument {get;组; }                 public List getDocumentRevision {get;组; }             }

查看:

“%>
<% foreach (var item in Model.getDocument)
   { %>


        <tr>
            <td>

             <%:Html.DisplayFor(ModelState => item.DOCUMENT_NAME)%>
            </td>
            <td>
              <%:Html.DisplayFor(ModelState => item.ActiveDate)%>
            </td>    
            <td>
                <%:Html.DisplayFor(ModelState => item.Revision)%>
            </td>
             <td>
      </tr>

<% } %>
来自文档类的

==&gt; item.DOCUMENT_NAME和item.ActiveDate。

来自Document_Revision类的item.Revision。

如何在视图中同时显示两个类的值。

控制器:

var model = new GetDocumentParent
             {
                 getDocument = db.Document.ToList(),
                 getDocumentRevision = db.DocumentRevisions.ToList()

             };
             return View(model);

型号:  1.

公共类文件     {

     public string DOCUMENT_NAME
      {
        get;
        set;
      }
    public Nullable<System.DateTime> ActiveDate
      {
        get;
        set;
      }
}

2

公共类DOCUMENT_REVISIONS  {     公共字符串REVISION     {         得到;         组;     }  }

提前致谢

2 个答案:

答案 0 :(得分:1)

始终记住,最好有一个视图模型来表示发送到视图的数据。视图将执行查看模型所需的操作。下面的代码可以指导您,您只需更改它以适应您的方案。

让我们说我有一个客户,每个客户只有一个地址。我将创建一个名为CustomerDetailsViewModel的视图模型来表示此数据:

public class CustomerDetailsViewModel
{
     public string FirstName { get; set; }

     public string Lastname { get; set; }

     public int Age { get; set; }

     public string AddressLine1 { get; set; }

     public string AddressLine2 { get; set; }

     public string City { get; set; }
}

显示客户和客户地址详细信息的操作方法:

public class CustomerController : Controller
{
     private readonly ICustomerRepository customerRepository;

     public CustomerController(ICustomerRepository customerRepository)
     {
          // Check customerRepository for nulls

          this.customerRepository = customerRepository;
     }

     public ActionResult Details(int id)
     {
          // Check that id is not zero or negative

          Customer customer = customerRepository.GetById(id);

          // Get the customer's address
          Address address = customerRepository.GetCustomerAddress(id);

          CustomerDetailsViewModel viewModel = new CustomerDetailsViewModel()
          {
               FirstName = customer.Firstname,
               LastName = customer.LastName,
               Age = customer.Age,
               AddressLine1 = address.AddressLine1,
               AddressLine2 = address.AddressLine2,
               City = address.City
          }

          return View(viewModel);
     }
}
上面的

id代表客户的唯一标识符。它用于返回一个cusotmer:

Customer customer = customerRepository.GetById(id);

并且还用于返回特定客户的地址:

Address address = customerRepository.GetCustomerAddress(id);

ICustomerRepository实例由IoC container注入,例如Autofac

在您的视图中,您可以按原样传递此视图模型,并可以根据需要显示数据:

@model MyProject.DomainModel.ViewModels.Customers.CustomerDetailsViewModel

<div class="content">

     <div class="display-label">First Name: </div>
     <div class="display-content">@Model.FirstName</div>

     <div class="display-label">Last Name: </div>
     <div class="display-content">@Model.LastName</div>

     <div class="display-label">Age: </div>
     <div class="display-content">@Model.Age</div>

     <div class="display-label">Address Line 1: </div>
     <div class="display-content">@Model.AddressLine1</div>

     <div class="display-label">Address Line 2: </div>
     <div class="display-content">@Model.AddressLine2</div>

     <div class="display-label">City: </div>
     <div class="display-content">@Model.City</div>

</div>

我希望这会有所帮助。

答案 1 :(得分:0)

有什么问题? 在控制器中使用:

var model = new GetDocumentParent();
model.getDocument = ...//Code that initialize getDocument
model.getDocumentRevision =...//Code that initialize getDocumentRevision

在视图中:

@Html.EditorFor(m=>m.getDocument);
@Html.EditorFor(m=>m.getDocumentRevision);