我有一个问题,即查看模型并向数据库添加信息。
我们说我有这两个类:
public class Ad {
public int Id { get; set; }
public int CategoryId { get; set; }
public string Headline { get; set; }
public string Text { get; set; }
public int Type { get; set; }
public Category Category { get; set; }
}
public class Category {
public int CategoryId { get; set; }
public int CategoryName { get; set; }
public IColletion<Ad> Ads { get; set; }
}
Context class:
public DbSet<Ad> Ads { get; set; }
public DbSet<Category> Categories { get; set; }
这些模型真的过于简单,但我只想了解背景。假设我想为视图创建一个视图模型,假设要向db添加条目。我如何将信息添加到&#34;广告&#34;视图模型中的数据库表。让我们说视图模型看起来像:
namespace Website.Models
{
public class CreateViewModel
{
public Ad Ad { get; set; }
public ICollection<Categories> Categories { get; set; }
public Dictionary<int, string> AdTypes { get; set; }
public CreateViewModel()
{
// to populate a dropdown on the "Create" page
this.Adtypes= new Dictionary<int, string>
{
{1, "For sale"},
{2, "Want to buy"},
{3, "Want to trade"},
{4, "Have to offer"}
};
}
}
}
添加到数据库时我唯一需要的是Ad类中的参数(尽管我需要视图模型来呈现下拉列表)。但是如何从CreateViewModel中提取它以添加到db。
这是我目前的代码:
[HttpPost]
public ActionResult Create(Ad ad)
{
if (ModelState.IsValid)
{
db.Ads.Add(ad);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(ad);
由于这需要广告类,如何从视图模型中仅提取广告参数并将其插入到数据库中。 对不起,很长的帖子,可能是一些严肃的新手。我只是不知道如何更好地解释它。
如果有人可以解释视图模型,或者将我引导到某个网站,我将不胜感激。
/米
答案 0 :(得分:6)
当您需要网站上的更多数据(如下拉列表值)时,您可以使用Viewmodels。所以我们假设你要制造一辆汽车。
汽车对象(Car.cs)
public class Car
{
public int Id {get;set;}
public string Color {get;set;}
public string Name {get;set;}
}
但是您不想在文本框中自己键入颜色。假设你想从下拉列表中选择颜色。如果是这样,你需要以某种方式添加颜色列表(SelectList)到下拉列表。
Viewmodel在这种情况下很有用(CreateCarViewModel.cs)
public CreateCarViewModel
{
public Car Car {get;set;}
public SelectList Colors{ get; set; } //List of colors for dropdown
}
控制器
ActionResult CreateCar()
{
CreateCarViewModel CCVM = new CreateCarViewModel();
List<string> colors = new List<string>{"Black","White"};
CCVM.Colors = new SelectList(colors);
//Your view is expecting CreateCarViewModel object so you have to pass it
return View(CCVM);
}
CreateCar(CreateCar.cshtml)
@model YourSolutionName.ModelsFolder.CreateCarViewModel
//form etc.
{
@Html.DropDownListFor(x => x.Car.Color, Model.Colors)
@Html.TextBoxFor(x => x.Car.Name)
}
再次控制器
[HttpPost]
//Again: but now controller expects CreateCarViewModel
ActionResult CreateCar(CreateCarViewModel CCVM)
{
if (ModelState.IsValid)
//update database with CCVM.Car object and redirect to some action or whatever you want to do
else
{
//populate your colors list again
List<string> colors = new List<string>{"Black","White"};
CCVM.Colors = new SelectList(colors);
return View (CCVM);
}
}