2012-07-15 72 views
1

我剛開始學習MVC 4 ASP.NET。我正在使用一個名爲MVC Music Store的教程作爲起點。我有一個名爲'Orders'的數據庫表,其中包含許多記錄。我決定嘗試在一個表格中顯示所有的訂單。這裏是訂貨型號:ASP.NET MVC顯示數據庫表

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._%+-][email protected][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; } 
    } 
    } 

我可以顯示用剃刀將視圖的數據庫的結果,但它會顯示一個頁面上的每個視圖中的表,這是非常長的。

我的問題是,有沒有辦法讓頁面只顯示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.0以外的東西嗎? – Jared 2012-07-15 00:59:01

+0

您是否使用實體框架進行數據庫訪問? – Jared 2012-07-15 01:00:48

+0

是的,我使用實體框架,你可以看到使用System.Data.Entity;在上下文模型中。沒有看過數據庫(它是SQL Server Compact Edition),因爲我不知道如何,因爲我說我正在學習;) – user1448260 2012-07-15 01:17:40

回答

1

關於你的第一個問題......分頁是你想要完成的,有幾個好的指南可以幫助你完成這個任務。我個人建議你學習使用LINQ /實體框架/ MVC框架的,因爲一旦你知道那些好一點的分頁位應該是相當不錯的容易的添加。

Pagination Tutorial

在關於你的第二個問題...

您可以使用服務器資源管理器來檢查數據庫的內容,這是我將開始驗證Total實際存在的內容!

Server Explorer

對於這個工作,你可能必須使用添加連接公用程序(如果它尚未安裝),它被描繪直接在上面的圖像中「數據」顯示「T」。

+0

謝謝,我正在尋找分頁。我設法使用上述方式查看數據庫順序表,實際上每行的總數爲0.00。任何想法爲什麼它沒有被添加到數據庫?所有涉及的代碼都在我原來的問題中。謝謝,如果你能幫助! – user1448260 2012-07-15 22:39:56

+0

@ user1448260我實際上沒有看到任何填充數據庫的代碼。 – Jared 2012-07-16 00:27:19