如何从Customer实例访问Orders属性?

时间:2012-11-22 09:33:07

标签: asp.net-mvc-3 c#-4.0 entity-framework-4

我有两张桌子作为我学习c#和asp.net的一部分。客户和订单以及我在POCO中的1:m关系。

public class Customer
{
public int CustID {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public List<Orders> orders {get; set;}
}

public class Orders
{
public int OrdersID {get; set;}
public int CustID {get; set;}
public string OrderName {get; set;}
public virtual Customer customer {get; set;}
}

现在我的问题是如何在客户实例订单实例的一个视图中显示客户和订单的列表。

这就是我在控制器中所拥有的:

    namespace MvcApplication3.Controllers
{ 
    public class janController : Controller
    {
        private coContext db = new coContext();

     public ViewResult Index()
        {

        return View(db.customer.ToList());
    }

我的DbContext的代码:

    namespace MvcApplication3.Models
{
    public class coContext : DbContext
    {
        public DbSet<Customer> customers { get; set; }
        public DbSet<Orders> orders { get; set; }

    }
}

我的部分视图包含以下代码:

 @model List<MvcApplication3.Models.Customer>
 @foreach(var customer in Model) {
    <div>Display customer props:</div>
    @Html.DisplayFor(m => customer.LastName)

    <div>Display Orders:
        **@foreach(var order in customer.Orders)** {
            <div>Display some order props:
              @Html.DisplayFor(m => order.OrderName)
            </div>
        }
    </div>
}

我打算查看来自客户的子项属性或数据。简而言之,我想要根据客户读取相关数据,即客户FirstName姓氏(这些必须是唯一的),然后在此之后拥有相关数据(OrderName)。多数民众赞成我想做的事。

2 个答案:

答案 0 :(得分:1)

我决定将我的“评论”全部写在一起作为答案:

http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

1 - 您可能忘记的事实是使用延迟加载或不使用.....取决于您是否使用EF4.X / 5.X CodeFirst,您可以需要做类似的事情:

var res = db.Customers.where(x=>x.Deleted != null).include(x=>x.Orders).toList(); 

否则(如果你没有加载所有“子”属性“你将无法在视图中显示)

2 - Sithelo&gt; @emanyalpsid谢谢Emanyalpsid。如何在视图中加载子属性。我尝试了这个Html.DisplayFo(modelItem =&gt; item.orders.OrderName但是它可以让我这样做。

您可以使用不同的方式,例如Jan解决方案,或其他类似的方式:MVC editortemplates:http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

答案 1 :(得分:0)

我仍然不确定,你的问题到底是什么,但我试着回答它。 根据您阅读的评论,您想了解如何在视图中显示相关数据。

@model List<Customer>

@foreach(var customer in Model) {
    <div>Display customer props:</div>
    @Html.DisplayFor(m => customer.LastName)

    <div>Display Orders:
        @foreach(var order in customer.Orders) {
            <div>Display some order props:
              @Html.DisplayFor(m => order.OrderName)
            </div>
        }
    </div>
}

这是你在找什么?

修改

我看过你的项目。您在视图中有以下代码:

@foreach(var customer in Model) {
    @Html.DisplayFor(m => customer.LastName)
}

@foreach(var order in customer.orders) {
    <div>Display some order props:
        @Html.DisplayFor(m => order.OrderName)
    </div>
}

问题是,您正在关闭第一个foreach循环,您必须在第一个循环中嵌入第二个循环。这就是你的第二个循环中未知变量customer的原因。它必须是这样的:

@foreach(var customer in Model) {
    @Html.DisplayFor(m => customer.LastName)

    @foreach(var order in customer.orders) {
        <div>Display some order props:
            @Html.DisplayFor(m => order.OrderName)
        </div>
    }
}