2016-01-27 47 views
0

最近我一直試圖進入MVC。我完成了微軟asp.net網站上的MVC教程。現在我正試圖弄清楚如何在應用程序的模型類(C#)代碼中應用以下數據庫設計,我遇到了一些麻煩。MVC將來自兩個不同表格的數據合併到一個視圖中

我想知道我怎麼能一個產品分類添加到我的模型:

Database design

我的模型類:

namespace myprojectname.Models 
{ 
    public class ShoppingCartItems 
    { 
     public virtual int ID { get; set; } 
     [Required] 
     [Display(Name="Product name")] 
     public virtual string ProductName { get; set; } 
     //[Display(Name="Category")] 
     //public virtual int CategoryName { get; set; } 
     [Display(Name="Date")] 
     public virtual DateTime DateAdded { get; set; } 
     [Required] 
     [DataType(DataType.Currency)] 
     public virtual decimal ProductPrice { get; set; } 
     public virtual int AmountAvailable { get; set; } 
    } 
} 

ShoppingCartItems是什麼應該顯示的產品表中的所有條目。 據我所知,應該可以將所有表格都包括在內,並在一個頁面上顯示所有類別的產品。

任何人都可以解釋我是如何看這樣的MVC模型類(或者我需要添加一個查詢到控制器類?),以顯示屬於顯示產品的索引視圖上的類別?我是否需要創建一個Categories類型的對象並將其添加到我的屬性中?

回答

0

是的,你應該爲Category創建一個類。那麼你的Product類應該有一個List屬性。

當您將您的產品列表傳遞給您的視圖時,他們將知道他們擁有哪些類別。

沒有關於您正在使用的數據層技術的更多信息,我無法提供更多示例對不起。

0

您可以簡單地創建ViewModel類。在您的項目中創建一個文件夾,並在該文件夾中創建一個類。

public class ViewModel 
{ 
    public Product Product { get; set; } 
    public IEnumerable<Product> Products { get; set; } 

    public Genre Category { get; set; } 
    public IEnumerable<Genre> Categories{ get; set; } 
} 

然後在你的行動,你可以叫你ViewModel類。

public ActionResult ExampleClass() 
{ 
     var viewModel = new ViewModel 
     { 
      Products = db.Products.ToList(), //you can also call just one product here 
      Categories = db.Categories .ToList() //same here 
     }; 

     return View(viewModel);; 
} 

查看:

@model Injuriesp.ViewModels.ViewModel 
+0

我會試着看看這是否會幫助我。 – Barrosy

0

我第一次在這裏,我希望這有助於: 比如產品型號爲:

[Table("Products")] 
public class Product 
{ 
    [Key] 
    public string Id { get; set; } 
    [Required] 
    public string Name { get; set; } 
} 

分類模型:

[Table("Categories")] 
public class Category 
{ 
    [Key] 
    public string Id { get; set; } 
    [Required] 
    public string Name { get; set; } 
} 

產品類別mo德爾:

[Table("ProductCategories")] 
public class ProductCategory 
{ 
    [Key] 
    [Column(Order = 0)] 
    public string ProductId { get; set; } 
    [Key] 
    [Column(Order = 1)] 
    public string CategoryId { get; set; } 
    public virtual Category Category { get; set; } 
} 

您需要添加視圖模型:

// GET: Products/Details/5 
    public async Task<ActionResult> Details(string id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     Product product = await db.Products.FindAsync(id); 
     if (product == null) 
     { 
      return HttpNotFound(); 
     } 
     ProductDetailsViewModel model = new ProductDetailsViewModel() 
     { 
      Product = await db.Products.SingleOrDefaultAsync(x => x.Id == id), 
      ProductCategories = await db.ProductCategories.Where(x => x.ProductId == id).ToListAsync() 
     }; 
     return View(model); 
    } 

所以finaly詳情查看:

@model YourApplicationName.Models.ProductDetailsViewModel 



<hr /> 
<dl class="dl-horizontal"> 
    <dt> 
     @Html.DisplayNameFor(model => model.Product.AddedAt) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Product.AddedAt) 
    </dd> 

    <dt> 
     @Html.DisplayNameFor(model => model.Product.Name) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Product.Name) 
    </dd> 

    <dt> 
     @Html.DisplayNameFor(model => model.Product.Description) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Product.Description) 
    </dd> 

    <dt> 
     @Html.DisplayNameFor(model => model.Product.InwearhouseQuantity) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Product.InwearhouseQuantity) 
    </dd> 

    <dt> 
     @Html.DisplayNameFor(model => model.Product.InternalPrice) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Product.InternalPrice) 
    </dd> 

    <dt> 
     @Html.DisplayNameFor(model => model.Product.ExternalPrice) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Product.ExternalPrice) 
    </dd> 

    <dt> 
     @Html.DisplayNameFor(model => model.Product.Published) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Product.Published) 
    </dd> 

    <dt> 
     @Html.DisplayNameFor(model => model.Product.Url) 
    </dt> 

    <dd> 
     @Html.DisplayFor(model => model.Product.Url) 
    </dd> 
    <dt> 
     @Html.DisplayNameFor(model => model.ProductCategories) 
    </dt> 
    <dd> 
     <table class="table"> 
      <tr> 
       <th>Category</th> 
       <th>Description</th> 
      </tr> 
      @foreach (var item in Model.ProductCategories) 
      { 
       <tr> 
        <td> 
         @Html.DisplayFor(modelItem => item.Category.Name) 
        </td> 
        <td> 
         @Html.DisplayFor(modelItem => item.Category.Description) 
        </td> 
        <td> 
         @Html.DisplayFor(modelItem => item.Category.Url) 
        </td> 
       </tr> 
      } 
     </table> 
    </dd> 
</dl> 

public class ProductDetailsViewModel 
{ 
    public virtual Product Product { get; set; } 
    public virtual ICollection<ProductCategory> ProductCategories { get; set; } 
} 

控制器的 「詳細信息」 部分現在例子

相關問題