创建视图 - 使用产品订购

时间:2016-04-12 14:53:29

标签: c# asp.net asp.net-mvc

我不知道我会怎么做,我有一个Orders类,它包含用户的订单详细信息,地址等,还有一个OrderDetails类,它包含产品ID和一个Product类,包含所有产品信息,成本,颜色等等,我如何在一个视图中创建一个视图来保存所有这些内容。与订单1一样,OrderDetails 1将按此顺序保留产品。

例如,我想显示订单明细,例如地址,然后是它下面的产品。我该怎么做?此外,它还需要与登录用户

相关

这是我的课程

顺序

[Bind(Exclude = "OrderId")]
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._%+-]+@[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; }

订单明细类

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

所以订单类与用户有关,这会显示地址等,然后我想要与其下面的订单相关的产品

视图模型

//From ORDER Table
public int OrderId { get; set; }
public System.DateTime OrderDate { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
public string Email { get; set; }
public decimal Total { get; set; }


//from Products
public List<Product> Products { get; set; }

1 个答案:

答案 0 :(得分:4)

使用ViewModel - 一个介于视图和模型之间的类。

非常常见的是需要在模型外部生成视图特定数据 - 组合框项等,对于这种情况,您应该使用视图模型。这些数据在模型本身上在语义上是错位的,因此您使用中间对象来提供视图并将其映射到模型类和从模型类映射 - 您可以使用AutoMapper等映射器使此过程变得轻而易举。

参见MVVM:

https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel