ASP.Net MVC View已返回,但如何显示其他信息?

时间:2011-03-24 16:16:25

标签: asp.net-mvc-3

我有一个SQL数据库,其中包含以下内容:客户,物品,服装和食品。

项目是服装或食品的关键。 物品也是客户的关键。因此,顾客可以有一件物品,可以是食物或衣服。

我正在使用ADO.Net Entity Framework并自动生成此内容。

我目前有以下设置:一个人可以在网页上输入他们的ID,这是通过一个表格帖子发送的,控制器拿起它并使用LINQ查询数据库以获取客户。然后返回客户视图(详细信息)。我现在可以看到所有客户的详细信息等。

然而,我想要的是能够看到顾客拥有的物品,不同的食品和衣物,但我不确定如何做到这一点。我还希望能够允许用户编辑衣服和食品表的一个字段。知道如何实现这个吗?

这是我的CustomerController中的ActionResult:

        public ActionResult Details(int id)
    {
        var cust = (from c in dataModel.Customers
                    where (c.MembershipID == id)
                    select c).First();
        return View(cust);
    }

我还可以编写cust.Items,这是我想要在客户(他们的项目)的视图中显示的实体。我如何在视图中显示这个?

希望这能让我更清楚地了解我想要实现的目标以及如何实现目标。

感谢。

2 个答案:

答案 0 :(得分:0)

通常,如果要传回仅包含在某个实体中的信息,则必须创建一个包含多个对象的类。因此,如果您想要一个显示您的客户信息的页面及其所有项目(然后可以编辑它们),您需要让控制器操作传回“CustomerAndItems”对象(或类似名称的对象)。此对象将包含对Customer的引用以及其Items的集合。 (您在Action中构建CustomerAndItems对象。)

然后,您的视图将强烈输入CustomerAndItems,然后您可以像往常一样显示每条信息。

答案 1 :(得分:0)

使用Entity Framework,如果您的表与正确的外键正确链接,那么您的Customer实体应该具有属于Items集合的属性。

您还可以创建自己的强类型ViewModel,其中包含Customer的字段,并为服装和食品实现您自己的属性,并使用其他查询填充这些属性。

这个问题是昨晚被问到的,但它的相似之处。问题中的人希望信息填充传入的下拉列表。您想要类似的东西,不是用于下拉列表,而是填写要编辑的文本框。 How to properly populate drop downs from ViewData in controller on multiple views in ASP.NET MVC

例如,要通过创建新类来创建ViewModel,并将其命名为CustomerAndItemsViewModel。

public class CustomerAndItemsViewModel
{
    public Customer Customer { get; set; }
    public IQueryable<Items> Items { get; set; }        
}


public ActionResult Details(int id)
{
    var cust = (from c in dataModel.Customers
                where (c.MembershipID == id)
                select c).First();
    var items = (from i in dataModel.Items
                where (i.MembershipID == cust.MembershipID)
                select i;
    return View(new CustomerAndItemsViewModel { Customer = cust, Items = items });
}

不要忘记,您将不再将客户传递给您。因此,您需要将顶部的行更改为:

@model Your.Path.To.CustomerAndItemsViewModel