我正在从示例应用程序MVC Music Store学习MVC。它有两个数据库表,一个称为“ Order”,另一个称为“ OrderDetails”。如果已下订单,并且客户选择了一个以上的商品,则结帐后,购买的每个商品都会在OrderDetails数据库中创建一个新行,并且OrderDetailsID将递增。

OrderDetail数据库如下所示:

http://imagebin.org/221494


我想编写一个仅传递具有相同特定OrderId的所有行的控制器。例如,在该数据库中,有3行,每行具有相同的OrderId'3'。

我该怎么做并将其传递到剃刀视图?我试过了:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcMusicStore.Models;

namespace Test.Controllers
{
public class OrderDetailsController : Controller
{
    private MusicStoreEntities db = new MusicStoreEntities();

          //
    // GET: /OrderDetails/Details/5

    public ActionResult Details(int id = 0)
    {
        OrderDetail orderdetail = db.OrderDetails.Find(id);
        if (orderdetail == null)
        {
            return HttpNotFound();
        }
        return View(orderdetail);
    }


这将返回基于OrderDetailsId的单个结果,而不是全部具有相同OrderId的多个结果。我应该能够访问.. :: 11091 / orderdetails / Details / 3,并且看到的不是一个结果,而是三个不同专辑及其价格的列表。

有没有简单的方法可以做到这一点?谢谢你的建议。

最佳答案

我猜您希望LINQ查询执行此操作。

原始答案(仅是OrderItems)

以下内容就足够了,但请注意,您需要将剃刀视图的模型类型从OrderDetail更改为IList<OrderDetail>

public ActionResult Details(int id = 0)
{
    var orderdetails = db.OrderDetails.Where(od => od.OrderId == id).ToList();
    if ((orderdetails == null) || (!orderdetails.Any()))
    {
        return HttpNotFound();
    }
    return View(orderdetails);
}


编辑

因为您现在要将集合传递给视图,所以需要遍历所有项目以呈现它。就是说,实际上并非只为OrderDetails获取Order,而是取回所有与之相关的Order.Include(),然后将图形传递给视图可能有意义。 。我假设您已经在Entity Framework中设置了OrderDetailsOrder之间的关系。

控制者

public ActionResult Details(int id = 0)
{
    var orderWithDetails = db.Orders
                             .Include(o => o.OrderDetails)
                             .FirstOrDefault(o => o.OrderId == id);
    if (orderWithDetails == null)
    {
        return HttpNotFound();
    }
    return View(orderWithDetails);
}


查看(采用已预先加载OrderDetailsOrder

@model MvcMusicStore.Models.Order


...在这里显示订单级别字段

<div class="display-label">
   @Html.DisplayNameFor(model => model.Username)
</div>
<div class="display-field">
  @Html.DisplayFor(model => model.Username)
</div>


...在此处显示OrderDetail级别字段,例如在表格或表格中

@foreach (var orderItem in model.OrderDetails) {

  <div class="display-label">
       @Html.DisplayNameFor(orderItem => orderItem.OrderItemField1)
  </div>
  <div class="display-field">
      @Html.DisplayFor(orderItem => orderItem.OrderItemField1)
  </div>
}

关于asp.net - 查询数据库MVC 4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11572953/

10-10 18:38