最近我一直试图进入MVC。我在微软的asp.net网站上完成了MVC教程。现在我想弄清楚如何在我正在处理的应用程序的模型类(C#)代码中应用以下数据库设计,我遇到了一些麻烦。
我想知道如何将ProductCategory添加到我的模型中:
我的模特课:
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模型类(或者我是否需要向控制器类添加查询?)需要看起来像是为了在属于所显示产品的索引视图上显示类别?我是否需要创建类别为Category的对象并将其添加到我的属性中?
答案 0 :(得分:0)
是的,你应该为Category创建一个类。那么你的Product类应该有一个List属性。
当您将产品列表传递给View时,他们会知道他们拥有哪些类别。
如果没有关于您正在使用的数据层技术的更多信息,我无法提供更多示例。
答案 1 :(得分: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
答案 2 :(得分: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; }
}
产品类别型号:
[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; }
}
现在控制器的“详细信息”部分示例:
// 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);
}
最后详情查看:
@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>