如何在mvc3中的单个视图中从两个表或两个类获取数据。
我想显示两个表中的数据。
我有一个父类和两个子类。
即
公共类GetDocumentParent
{enter code here
public List getDocument {get;组; }
public List getDocumentRevision {get;组; }
}
查看:
“%&gt;<% 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 { 得到; 组; } }
提前致谢
答案 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);