Asp.net mvc 从数据库填充下拉列表并保存到数据库
我有两张桌子,位置和工作 当我想要创建一个新作业时,我可以从从从位置表填充的下拉列表中选择位置 我的创建视图:Asp.net mvc 从数据库填充下拉列表并保存到数据库,asp.net-mvc,entity-framework,model-view-controller,model,Asp.net Mvc,Entity Framework,Model View Controller,Model,我有两张桌子,位置和工作 当我想要创建一个新作业时,我可以从从从位置表填充的下拉列表中选择位置 我的创建视图: public ActionResult Create(CreateJobViewModel model) { model.Locations = repository.GetAllLocations() .Select(x => new SelectListItem { Text = x.State, Value = x.LocationId.To
public ActionResult Create(CreateJobViewModel model)
{
model.Locations = repository.GetAllLocations()
.Select(x => new SelectListItem { Text = x.State, Value = x.LocationId.ToString() })
.ToList();
return View(model);
}
和我的视图模型:
public class CreateJobViewModel
{
public Job Job { get; set; }
public IList<SelectListItem> Locations { get; set; }
public int SelectLocationId { get; set; }
}
post操作使用作业实体,get操作使用CreateJobViewModel,在我以前的项目中,我只创建或显示,我从未遇到过这样的情况
我正在考虑在视图之间传递模型
在我的创建视图中,我不知道应该使用哪个模型,视图模型“CreateJobViewModel”还是“Job”实体
或
我如何将这两个模型链接起来?您的想法是错误的。为什么有作业视图模型和作业业务对象 视图应该只知道视图模型,控制器(如何进行此设置)应该同时知道视图模型和业务模型,而存储库只知道业务模型 让Post操作返回作业视图模型。然后将视图模型转换为控制器中的模型,并传递到存储库 有几种方法可以做到这一点,在控制器中手动完成,在业务对象的构造函数中完成,或者使用自动映射器
我的首选方法是为接受视图模型的业务对象创建一个新的构造函数,并将属性复制到我需要的对象上(我也从一个模型复制到另一个视图模型)。您应该在创建中使用视图模型,然后使用自定义映射逻辑创建作业实体并发送到您的业务层或数据层
您可以使用自动映射器在实体之间进行映射。这是我的一些代码,与您的问题类似,您可以根据需要修改它。希望能有帮助 控制器:
public ActionResult Create()
{
string selected = (from cat in dc.Category
join sub in dc.SubCategory on cat.Id equals sub.SubCategoryId
select cat.Name).First();
ViewBag.Category = new SelectList(dc.Category, "Id", "Name", selected);
var model = new SubCategory();
return View(model);
}
视图:
类别:
@Html.DropDownListFor(model=>model.CategoryId,(IEnumerable)ViewBag.Category,
新的{@class=“表单控制”})
你能给我举个例子吗?
@model foo.CreateJobViewModel
@model foo.Job
public ActionResult Create()
{
string selected = (from cat in dc.Category
join sub in dc.SubCategory on cat.Id equals sub.SubCategoryId
select cat.Name).First();
ViewBag.Category = new SelectList(dc.Category, "Id", "Name", selected);
var model = new SubCategory();
return View(model);
}
<div> Category:</div>
<div>
@Html.DropDownListFor(model => model.CategoryId, (IEnumerable<SelectListItem>)ViewBag.Category,
new { @class = "form-control" })
</div>