我试图弄清楚如何使用带有单个回发的视图模型插入多行数据。我正在使用 EF 和代码优先方法。我遇到问题的模型具有一对多的关系。我想做的是,每当创建一个人时,应该将多个任务与一个人(不同的表)一起保存到数据库中。
到目前为止,我只能保存第一个任务而不是全部。
我的模型是:
public class Person
{
public Person()
{
this.Tasks = new List<Task>();
}
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Task> Tasks { get; set; }
}
public class Task
{
[key]
public int ID { get; set; }
public int PersonID { get; set; }
public string Task { get; set; }
public virtual Person Person { get; set; }
}
视图模型:
Public class PersonData
{
public Person Person { get; set; }
public Task Task { get; set; }
}
看法:
@model Project.ViewModels.PersonData
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Event</legend>
<div>
@Html.TextBoxFor(model => model.Event.Name)
</div>
<div id="taskdiv">
</div>
@*dynamically generated textboxes here*@
<div>
@Html.ActionLink("Back to List", "Index")
</div>
</fieldset>
<script type="text/javascript">
// took few codes out here, but whats happening here is based on int value textboxes for Task appears
for (var i = 1; i <= $count; i++) {
$('#taskdiv').append('<div><label>Task #' + i + ' </label>@Html.TextBoxFor(model => model.Task.Task)</div>');
}
控制器:
public class PersonController : Controller
{
private Context db = new DBContext();
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(ViewModels.PersonData personData)
{
if (ModelState.IsValid)
{
db.Person.Add(eventData.Person);
db.Tasks.Add(eventData.Task);
db.SaveChanges();
return RedirectToAction("Index");
}
return View();
}
至少我知道任务正在通过。我尝试了几件事
foreach (char c in personData.Task.Task.AsEnumerable)
{ count += 1}
并收到正确数量的号码。我认为使用 ViewModels 是比较常见的,但我没有看到我想在任何教程或论坛中做什么......
我的目标是能够通过一次回发为每个人保存多项任务。任何建议将被认真考虑!