C# MVC将来自两个不同表的数据合并到一个视图中
最近我一直在努力进入MVC。我在微软的asp.net网站上完成了MVC教程。现在我正试图弄清楚如何在我正在处理的应用程序的模型类(C#)代码中应用以下数据库设计,我遇到了一些麻烦 我想知道如何将ProductCategory添加到我的模型中: 我的模型课:C# MVC将来自两个不同表的数据合并到一个视图中,c#,asp.net-mvc,C#,Asp.net Mvc,最近我一直在努力进入MVC。我在微软的asp.net网站上完成了MVC教程。现在我正试图弄清楚如何在我正在处理的应用程序的模型类(C#)代码中应用以下数据库设计,我遇到了一些麻烦 我想知道如何将ProductCategory添加到我的模型中: 我的模型课: namespace myprojectname.Models { public class ShoppingCartItems { public virtual int ID { get; set; }
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应该显示products表的所有条目。
据我所知,它应该是可能的脚手架所有的表和显示所有的产品与类别在一页上
有谁能解释一下,为了在索引视图上显示属于所显示产品的类别,这种MVC模型类(或者我需要向控制器类添加查询吗?)需要什么样的外观?是否需要创建类别类型的对象并将其添加到属性中?是的,您应该为类别创建一个类。那么您的产品类应该有一个List属性 当您将产品列表传递给您的视图时,他们将知道他们拥有哪些类别
如果没有关于您正在使用的数据层技术的更多信息,我无法给出更多示例。对不起。您可以简单地创建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; }
}
视图:
我是第一个来这里的,我希望这有助于: 例如,产品型号为:
[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; }
}
[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; }
}
产品类别模型:
[Table("Categories")]
public class Category
{
[Key]
public string Id { get; set; }
[Required]
public string Name { get; set; }
}
[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; }
}
您需要添加ViewModel:
public class ProductDetailsViewModel
{
public virtual Product Product { get; set; }
public virtual ICollection<ProductCategory> ProductCategories { get; set; }
}
公共类ProductDetailsViewModel
{
公共虚拟产品产品{get;set;}
公共虚拟ICollection ProductCategories{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);
}
//GET:Products/Details/5
公共异步任务详细信息(字符串id)
{
if(id==null)
{
返回新的HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Product Product=wait db.Products.FindAsync(id);
如果(产品==null)
{
返回HttpNotFound();
}
ProductDetailsViewModel=新ProductDetailsViewModel()
{
Product=wait db.Products.SingleOrDefaultAsync(x=>x.Id==Id),
ProductCategories=await db.ProductCategories.Where(x=>x.ProductId==id).ToListAsync()
};
返回视图(模型);
}
最后,详细信息视图:
@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>
@model YourApplicationName.Models.ProductDetailsViewModel
@DisplayNameFor(model=>model.Product.AddedAt)
@DisplayFor(model=>model.Product.AddedAt)
@DisplayNameFor(model=>model.Product.Name)
@DisplayFor(model=>model.Product.Name)
@DisplayNameFor(model=>model.Product.Description)
@DisplayFor(model=>model.Product.Description)
@DisplayNameFor(model=>model.Product.InwearhouseQuantity)
@DisplayFor(model=>model.Product.InwearhouseQuantity)
@DisplayNameFor(model=>model.Product.InternalPrice)
@DisplayFor(model=>model.Product.InternalPrice)
@DisplayNameFor(model=>model.Product.ExternalPrice)
@DisplayFor(model=>model.Product.ExternalPrice)
@DisplayNameFor(model=>model.Product.Published)
@DisplayFor(model=>model.Product.Published)
@DisplayNameFor(model=>model.Product.Url)
@DisplayFor(model=>model.Product.Url)
@DisplayNameFor(model=>model.ProductCategories)
类别
描述
@foreach(Model.ProductCategories中的var项)
{
@DisplayFor(modelItem=>item.Category.Name)
@DisplayFor(modelItem=>item.Category.Description)
@DisplayFor(modelItem=>item.Category.Url)
}
我会试试看这是否对我有帮助。