gpt4 book ai didi

c# - 使用没有魔术字符串的 ViewModels 的 MVC 下拉列表

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:16 25 4
gpt4 key购买 nike

我正在尝试从数据库中获取一个下拉列表来工作。我没有走得太远。我正在尝试使用 viewModel 而不是使用 Magic String 来做到这一点。我有一种感觉,我并不太远。有人可以看看我遗漏了什么或做错了什么吗?

我在 Controller 的这一行遇到编译错误:viewModel.Courts = CourtList,

我很确定这是错误的,但我正在思考如何做到这一点。

领域模型:

 public class Parent
{

public int ParentID { get; set; }

public string FirstName { get; set; }
public string LastName { get; set; }

public virtual Court Court { get; set; }
//public IEnumerable<SelectListItem> Courts { get; set; }
public virtual ICollection<Child> Childs { get; set; }

}

public class Court
{
public int CourtId { get; set; }
public string CourtName { get; set; }

public virtual ICollection<Parent> Parents { get; set; }
}

查看模型:

public class ParentVM
{

public int ParentID { get; set; }

public string FirstName { get; set; }
public string LastName { get; set; }

//public int CourtId { get; set; }
//public string CourtName { get; set; }

public virtual Court Court { get; set; }
//public virtual IEnumerable<Court> CourtList { get; set; }
public IEnumerable<SelectListItem> Courts { get; set; }

public IList<ChildVM> Children { get; set; }

}

Controller :

// GET: Parents/Create
public ActionResult Create()
{

IEnumerable<SelectListItem> CourtList = db.Courts.ToList().Select(x => new SelectListItem
{
Value = x.CourtId.ToString(),
Text = x.CourtName,

});



//ViewBag.CourtList = new SelectList(db.Courts, "CourtId", "CourtName");

ParentVM viewModel = new ParentVM()
{
Children = new List<ChildVM>()
{
new ChildVM(){Name="", DOB="", Address=""},
//new ChildVM(){Name="2", DOB="2", Address="222"},
//new ChildVM(){Name="3", DOB="3", Address="3"},
},

viewModel.Courts = CourtList,
};

return View(viewModel);

}

// POST: Parents/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ParentVM viewModel)
{
if (ModelState.IsValid)
{

var parent = new Parent()
{
FirstName = viewModel.FirstName,
LastName = viewModel.LastName
};

db.Parents.Add(parent);

foreach (ChildVM item in viewModel.Children)
{

var child = new Child()
{
Name = item.Name,
DOB = item.DOB,
Address = item.Address
};

db.Childs.Add(child);
}

//Parent parent = new Parent();
//var employee = AutoMapper.Mapper.Map<Parent, ParentVM>(parent);

db.SaveChanges();
return RedirectToAction("Index");
}

return View(viewModel);
}

查看:

@Html.DropDownList("Courts", (IEnumerable<SelectListItem>)Model.Courts)

最佳答案

您试图将下拉列表绑定(bind)到属性 Courts这是 IEnumerable<SelectListItem> . <select>回发无法绑定(bind)到集合的值类型(所选项目的值)。您需要绑定(bind)一个额外的属性(或者您可以绑定(bind)到 Court.CourtId,但 CourtNameCourt 属性不会在回发时绑定(bind)。

查看模型

public class ParentVM
{
public int ParentID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Required]
public int? SelectedCourt { get; set; } // bind the dropdown to this
public SelectList CourtList { get; set; }
public IList<ChildVM> Children { get; set; }
}

Controller

public ActionResult Create()
{
ParentVM model = new ParentVM()
{
Children = new List<ChildVM>() .....,
CourtList = new SelectList(db.Courts, "CourtId", "CourtName"),
SelectCourt = // set a value here if you want a specific option to be selected
});
return View(model);
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ParentVM model)
{
if (ModelState.IsValid)
{
Court court = db.Courts.Find(model.SelectedCourt) // get the Court based on `SelectedCourt`
var parent = new Parent()
{
FirstName = model.FirstName,
LastName = model.LastName,
Court = court
};
db.Parents.Add(parent);
foreach (ChildVM item in viewModel.Children)
{
....
db.Childs.Add(child);
}
db.SaveChanges();
return RedirectToAction("Index");
}
model.CourtList = new SelectList(db.Courts, "CourtId", "CourtName"); // reassign select list
return View(model);
}

查看

@Html.DropDownListFor(m => m.SelectedCourt, Model.CourtList, "--Please select--")

如果值为SelectedCourt匹配其中一个选项的值,它会在页面呈现时被选中,否则第一个(标签)选项将被选中。当您回发时,SelectedCourt 的值将是所选选项的值

关于c# - 使用没有魔术字符串的 ViewModels 的 MVC 下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27595715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com