【问题标题】:ASP.NET MVC displaying database tableASP.NET MVC 显示数据库表
【发布时间】:2012-07-15 00:53:47
【问题描述】:

我刚刚开始学习 MVC 4 ASP.NET。我使用名为 MVC Music Store 的教程作为起点。我有一个名为“订单”的数据库表,其中包含许多记录。我决定尝试在表格中显示所有订单。这是 Order 模型:

using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace MvcMusicStore.Models
{
[Bind(Exclude = "OrderId")]
public partial class Order
{
    [ScaffoldColumn(false)]
    public int OrderId { get; set; }

    [ScaffoldColumn(false)]
    public System.DateTime OrderDate { get; set; }

    [ScaffoldColumn(false)]
    public string Username { get; set; }

    [Required(ErrorMessage = "First Name is required")]
    [DisplayName("First Name")]
    [StringLength(160)]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name is required")]
    [DisplayName("Last Name")]
    [StringLength(160)]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Address is required")]
    [StringLength(70)]
    public string Address { get; set; }

    [Required(ErrorMessage = "City is required")]
    [StringLength(40)]
    public string City { get; set; }

    [Required(ErrorMessage = "State is required")]
    [StringLength(40)]
    public string State { get; set; }

    [Required(ErrorMessage = "Postal Code is required")]
    [DisplayName("Postal Code")]
    [StringLength(10)]
    public string PostalCode { get; set; }

    [Required(ErrorMessage = "Country is required")]
    [StringLength(40)]
    public string Country { get; set; }

    [Required(ErrorMessage = "Phone is required")]
    [StringLength(24)]
    public string Phone { get; set; }

    [Required(ErrorMessage = "Email Address is required")]
    [DisplayName("Email Address")]
    [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}",
        ErrorMessage = "Email is is not valid.")]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [ScaffoldColumn(false)]
    public decimal Total { get; set; }

    public List<OrderDetail> OrderDetails { get; set; }
   }
   }

我可以使用 razor 视图显示数据库结果,但它会在一个很长的表中的一个页面上显示每个视图。

我的问题是,有没有办法让页面只显示 20 个订单,然后我可以单击下一页查看接下来的 20 个?只是为了让您知道整个过程是如何工作的,我只是在使用实体框架进行“代码优先”(微软似乎在他们的大多数教程中都鼓励这种方法):

using System.Data.Entity;

namespace MvcMusicStore.Models
{
public class MusicStoreEntities : DbContext
{
    public DbSet<Order> Orders { get; set; }
    public DbSet<OrderDetail> OrderDetails { get; set; }
}
}

控制器:

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 OrdersController : Controller
{
    private MusicStoreEntities db = new MusicStoreEntities();

    //
    // GET: /Orders/

    public ActionResult Index()
    {
        return View(db.Orders.ToList());
    }


}
}

这是剃刀视图:

@model IEnumerable<MvcMusicStore.Models.Order>

@{
ViewBag.Title = "Index";
}


<h2>Orders Overview</h2>
<br />
<div class="CSSTableGenerator" >
<table>
<tr>
    <td>
        @Html.DisplayNameFor(model => model.OrderId)
    </td>
     <td>
        @Html.DisplayNameFor(model => model.OrderDate)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.Username)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.Total)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.FirstName)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.LastName)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.Address)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.City)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.State)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.PostalCode)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.Country)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.Phone)
    </td>
    <td>
        @Html.DisplayNameFor(model => model.Email)
    </td>


</tr>

@foreach (var item in Model) {
<tr>
     <td>
        @Html.DisplayFor(modelItem => item.OrderId)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.OrderDate)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Username)
    </td>
      <td>
        @Html.DisplayFor(modelItem => item.Total)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.FirstName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.LastName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Address)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.City)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.State)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.PostalCode)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Country)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Phone)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Email)
    </td>
    <td>

        @Html.ActionLink("Details", "Details", new { id=item.OrderId }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.OrderId })
    </td>
    </tr>
    }

    </table>
    </div>

第二个问题,表格中每个订单的总价始终为 0.0。但是所有其他字段都是正确的。感谢您的提示。

【问题讨论】:

  • 您是否查看了数据库以查看它是否保存为 0.0 以外的其他内容?
  • 您是否使用实体框架进行数据库访问?
  • 是的,我正在使用实体框架,您可以看到使用 System.Data.Entity;在上下文模型中。没有查看数据库(它是 SQL Server Compact Edition),因为我不知道如何,正如我所说的我正在学习;)

标签: mysql razor asp.net-mvc-4


【解决方案1】:

关于您的第一个问题... 分页是您想要完成的任务,并且有几个很好的指南来说明如何完成此任务。就我个人而言,我建议学习使用 Linq/Entity Framework/MVC 框架,因为一旦你对这些有所了解,分页位应该很容易添加。

Pagination Tutorial

关于你的第二个问题...

您可以使用服务器资源管理器检查数据库的内容,这是我将开始验证 Total 实际存在的地方!

为此,您可能必须使用添加连接实用程序(如果尚未设置),该实用程序位于图像中“数据”中“t”的正上方。

【讨论】:

  • 谢谢,正在查看分页。我设法使用您上面描述的方式查看了数据库订单表,实际上每行的总数是 0.00。知道为什么它没有被添加到数据库中吗?所涉及的所有代码都在我原来的问题中。如果您能提供帮助,谢谢!
  • @user1448260 我实际上没有看到任何填充数据库的代码。
猜你喜欢
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多