asp.net - 查询数据库 MVC 4

标签 asp.net mysql sql asp.net-mvc asp.net-mvc-3

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

OrderDetail 数据库如下所示:

http://imagebin.org/221494

我想编写一个 Controller ,它只传递具有相同特定 OrderId 的所有行。例如,在该数据库中,有 3 行,每行具有相同的 OrderId“3”。

我怎样才能做到这一点并将其传递给 Razor View ?我试过:

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)

以下内容应该足够了,但请注意,您需要将 Razor View 模型类型从 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);
}

编辑

因为您现在将集合传递给 View ,所以需要迭代这些项目来呈现它。也就是说,不只获取 OrderDetails 实际上可能是有意义的。对于 Order ,而是获取 Order.Include()所有相关OrderDetails ,然后将图形传递给 View 。我假设您已经在 Order 之间建立了关系和OrderDetails在 Entity Framework 中。

Controller

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

查看(获取 Order 和已预先加载的 OrderDetails)

@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/

相关文章:

c# - 如何在运行时从代码隐藏更改 CSS 键的值?

ASP.NET 无法读取文件 : "access to the path ... is denied"

php - MySQL 在 PHP 上使用外键显示结果

mysql - 基于变化同步的数据库策略

mysql - 在 MySQL 中将值设置为 NULL

php - 从 MySql 返回小于 60 天的行

母版页 head 标签中的 Javascript

mysql - 显示另一个表中另一个对应属性不为空的重复值的聚合

sql - 如何优化SQL Server代码?

c# - 在 ASP.NET MVC 4 Razor 中,如何获取 @Html.Label 的值(文本)?