2016-04-13 54 views
0

我是一名大學生,仍在學習。這是我的項目; 當用戶登錄時,他們可以將產品添加到購物籃。然後他們繼續到他們輸入地址和卡信息的地址/付款。我需要做的是一個「查看訂單」,用戶可以查看以前的訂單,這樣做的最佳方式是什麼?不要求所有的方式,只是你認爲最有效的顯示這些信息。 查看訂單需要顯示訂單詳細信息,地址,名稱等,並在訂單下面顯示產品。 請查看我的課程以獲取更多信息;顯示想要的數據的最佳方式

訂單

public partial class Order 
    { 
     [ScaffoldColumn(false)] 
     public int OrderId { get; set; } 

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

     [ScaffoldColumn(false)] 
     [Remote("CheckUserName", "Account")] 
     public string Username { get; set; } 

     [Required] 
     [StringLength(16, ErrorMessage = "Your name is too long")] 
     [Display(Name = "First Name")] 
     public string FirstName { get; set; } 

     [Required(ErrorMessage = "Your last name is required.")] 
     [StringLength(16, ErrorMessage = "Last name is too long.")] 
     [Display(Name = "Last Name")] 
     public string LastName { get; set; } 

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

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

     [Required(ErrorMessage = "Postcode is required.")] 
     [Display(Name = "Post Code")] 
     public string PostalCode { get; set; } 

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

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

     [RegularExpression(@"[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "Email doesn't look like a valid email address.")] 
     public string Email { get; set; } 

     [System.ComponentModel.DataAnnotations.Compare("Email")] 
     [Display(Name = "Confirm your email address")] 
     public string EmailConfirm { get; set; } 


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


     [ScaffoldColumn(false)] 
     public bool HasBeenShipped { get; set; } 

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

     public CardDetails cardDetails { get; set; } 
     //public List<CardDetails> cardDetails { get; set; } 
     public List<OrderDetail> OrderDetails { get; set; } 
    } 

的OrderDetail類

public class OrderDetail 
    { 
     public int OrderDetailId { get; set; } 
     public int OrderId { get; set; } 
     public int ProductId { get; set; } 
     public int Quantity { get; set; } 
     public decimal UnitPrice { get; set; } 
     public virtual Product Product { get; set; } 
     public virtual Order Order { get; set; } 
    } 

產品類別

public class Product 
{ 
    [Key] 
    public virtual int ProductId { get; set; } 
    public virtual int CategoryId { get; set; } 
    public virtual string Title { get; set; } 
    public virtual string Description { get; set; } 
    public virtual string Colour { get; set; } 
    public virtual string ProductImg { get; set; } 
    public virtual decimal Price { get; set; } 
    public virtual int Quantity { get; set; } 

    public Category Category { get; set; } 
} 

UPDATE ** 控制器;

public ActionResult Index() 
     { 
     var viewModel = (from o in new TshirtStoreDB().Orders 
        select new OrderArchiveViewModel 
        { 
         Address = o.Address, 
         City = o.City, 
         OrderDate = o.OrderDate, 
         PostalCode = o.PostalCode, 
         Details = (from d in o.OrderDetails 
            select new OrderDetailArchive 
            { 
             Description = d.Product.Description, 
             Quantity = d.Quantity, 
             Title = d.Product.Title, 
             UnitPrice = d.UnitPrice 
            }).ToList() 
        }).ToList() ; 

      return View(viewModel); 
     } 

ERROR FIXED

public class TshirtStoreDB : DbContext 
{ 

    public TshirtStoreDB() : base("name=TshirtStoreDB") 
    { 
    } 

    public DbSet<Product> Products { get; set; } 

    public DbSet<Category> Categories { get; set; } 

    public DbSet<Cart> Carts { get; set; } 

    public DbSet<Order> Orders { get; set; } 

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

} 

我查看;

@model T_shirt_Company_v3.ViewModels.OrderArchiveViewModel 

<table> 
    <tbody> 
     @foreach (var m in Model) 
     { 
      <tr> 
       <td>@m.OrderDate</td> 
       <td>@m.Address</td> 
       <td>@m.City</td> 
       <td>@m.PostalCode</td> 
       <td><button class="btnDetails">Details</button></td> 
      </tr> 
      foreach (var d in m.Details) 
       { 
       <tr style="display: none;"> 
        <td> 
         <table> 
          <tbody> 
           <tr> 
            <td>@d.Title</td> 
            <td>@d.Description</td> 
            <td>@d.Quantity</td> 
            <td>@d.UnitPrice</td> 
           </tr> 
          </tbody> 
         </table> 
        </td> 
       </tr> 
      } 
     } 
    <tbody> 
</table> 

錯誤:

T_shirt_Company_v3.Models.OrderArchiveViewModel: : EntityType 'OrderArchiveViewModel' has no key defined. Define the key for this EntityType.

T_shirt_Company_v3.Models.OrderDetailArchive: : EntityType 'OrderDetailArchive' has no key defined. Define the key for this EntityType.

OrderArchiveViewModels: EntityType: EntitySet 'OrderArchiveViewModels' is based on type 'OrderArchiveViewModel' that has no keys defined.

OrderDetailArchives: EntityType: EntitySet 'OrderDetailArchives' is based on type 'OrderDetailArchive' that has no keys defined.

+0

你問如何去了解數據持久化到數據庫,以及如何從數據庫中檢索過去的訂單?你是否使用實體框架代碼?它看起來像你是每個數據註釋,但更多的信息將不勝感激。 – GibralterTop

回答

1

您應該創建新的班級/模型,其中將包含您需要的所有信息。例如

public class OrderArchive 
{ 
    public System.DateTime OrderDate { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string PostalCode { get; set; } 
    public List<OrderDetailArchive> Details { get; set; } 
} 

public class OrderDetailArchive 
{ 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public int Quantity { get; set; } 
    public decimal UnitPrice { get; set; } 
} 

這只是一個示例,它如何查找,使用您需要的列。 然後,您必須從數據庫中獲取數據並將其放入您的對象中。採用這種模式,你可以通過這個代碼

var list = (from o in new dbContext().Order 
      select new OrderArchive 
      { 
       Address = o.Address, 
       City = o.City, 
       OrderDate = o.OrderDate, 
       PostalCode = o.PostalCode 
       Details = (from d in o.OrderDetails 
          select new OrderDetailArchive 
          { 
           Description = d.Product.Description, 
           Quantity = d.Quantity, 
           Title = d.Product.Title, 
           UnitPrice = d.UnitPrice 
          }).ToList() 
      }).ToList(); 

得到這個創建新視圖OrderArchive,並顯示到表中。

@model OrderArchive 

<table> 
    <tbody> 
    @foreach(var m in Model) 
    { 
     <tr> 
     <td>@m.OrderDate</td> 
     <td>@m.Address</td> 
     <td>@m.City</td> 
     <td>@m.PostalCode</td> 
     <td><button class="btnDetails">Details</button></td> 
     </tr> 
     foreach(var d in m.Details 
     { 
     <tr style="display: none;"> 
      <td> 
       <table> 
        <tbody>  
        <tr> 
         <td>@d.Title</td> 
         <td>@d.Description</td> 
         <td>@d.Quantity</td> 
         <td>@d.UnitPrice</td> 
        </tr> 
        </tbody> 
       </table> 
      </td> 
     </tr> 
     } 
    } 
    <tbody> 
</table> 

現在,你需要一些JavaScript,它會顯示訂單詳細信息,當你在按鈕詳細點擊會顯示與細節的子錶行。

$('.btnDetails').click(function(){ 
    $(this).parent().parent().next().css('display', ''); 
}); 

簡單的例子: https://fiddle.jshell.net/0keogrx2/

+0

這是一個很好的例子和解釋,我可以進一步麻煩你@Sousuke?我將如何使用控制器填充數據庫中的對象? –

+0

您首先使用EF代碼? – Sousuke

+0

是的,EF代碼第一分貝@Sousuke –

1

您可以添加在用戶個人資料部分View Orders鏈接。簡單的方法是創建一個帶訂購標題的table。如果用戶想深入鑽取,則可以顯示訂單明細。一個建議是檢查易趣和亞馬遜如何提供類似的功能。

+0

我在索引中有一個到M賬戶的鏈接,這是用戶可以在那裏查看訂單的地方。你是什​​麼意思創建一個訂單標題表?我將如何去做 –

+0

我建議你創建一個視圖,你將顯示hystorical命令。現在它更容易在表格中顯示這些數據,因此在該視圖中您必須放置一個表格。此外,僅在該表格中顯示訂單的消息是有意義的,並且讓用戶決定他/她是否想深入瞭解細節。 –

+0

我的回答有意義嗎?哪一部分沒有意義? –

相關問題