Asp.net mvc 使用视图模型时更新数据库

Asp.net mvc 使用视图模型时更新数据库,asp.net-mvc,mvvm,viewmodel,Asp.net Mvc,Mvvm,Viewmodel,我有一个关于视图模型和向数据库添加信息的问题 假设我有两门课: 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 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; }
因为这需要一个Ad类,所以如何从视图模型中仅提取Ad参数并将其插入db中。 抱歉,很长的帖子,可能是一些严肃的新手。我只是不知道如何更好地解释它

如果有人能给我解释一下视图模型,或是给我介绍一些这样的网站,我将不胜感激


/m

当您需要网站上的更多数据(如下拉列表的值)时,可以使用Viewmodels。假设你想创造一辆汽车

Car对象(Car.cs)

公车
{
公共int Id{get;set;}
公共字符串颜色{get;set;}
公共字符串名称{get;set;}
}
但你不想自己在文本框中输入颜色。假设您想从下拉列表中选择颜色。如果是这样,您需要在下拉列表中添加颜色列表(SelectList)

Viewmodel在这种情况下很有用(CreateCarViewModel.cs)

public-CreateCarViewModel
{
公共小汽车{get;set;}
public SelectList Colors{get;set;}//下拉列表中的颜色
}
控制器

ActionResult CreateCar()
{
CreateCarViewModel CCVM=新建CreateCarViewModel();
列表颜色=新列表{“黑色”、“白色”};
CCVM.Colors=新选择列表(颜色);
//您的视图需要CreateCarViewModel对象,因此您必须传递它
返回视图(CCVM);
}
CreateCar(CreateCar.cshtml)

@model YourSolutionName.ModelsFolder.CreateCarViewModel
//形式等。
{
@DropDownListFor(x=>x.Car.Color,Model.Colors)
@Html.TextBoxFor(x=>x.Car.Name)
}
又是管制员

[HttpPost]
//再次:但现在控制器需要CreateCarViewModel
ActionResult CreateCar(CreateCarViewModel CCVM)
{
if(ModelState.IsValid)
//使用CCVM.Car对象更新数据库,并重定向到某个操作或任何您想执行的操作
其他的
{
//再次填充颜色列表
列表颜色=新列表{“黑色”、“白色”};
CCVM.Colors=新选择列表(颜色);
返回视图(CCVM);
}
}

Mariusz:非常感谢您的精彩解释。我有点朝着这些方向思考,但我永远无法让它发挥作用。不过这肯定会帮我的忙!
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"}
                              };
    }
}
}
    [HttpPost]
    public ActionResult Create(Ad ad)
    {

        if (ModelState.IsValid)
        {
            db.Ads.Add(ad);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }

        return View(ad);