【问题标题】:How to get data from two table or two class in single view in mvc3如何在 mvc3 的单个视图中从两个表或两个类中获取数据
【发布时间】:2012-08-21 21:04:09
【问题描述】:

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

查看:

" %>
<% 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>

<% } %>

==>来自文档类的 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 { 公共字符串修订 { 得到; 放; } }

提前致谢

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案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 以上代表您客户的唯一标识符。它用于返回客户:

    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>
    

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 视图不显示第二类的值
      • @Nitin:你能调试一下并确定它是否填充了数据吗?
      • 您能发布您使用的代码吗?使用控制器方法和视图?你确定二等舱有什么东西吗?
      • item.DOCUMENT_NAME)%> item.Revision)%>
      • 控制器:var model = new GetDocumentParent { getDocument = db.Document.ToList(), getDocumentRevision = db.DocumentRevisions.ToList() };返回视图(模型);
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签