単一のポストバックでビューモデルを使用して複数行のデータを挿入する方法を見つけようとしています。私はEFとコードファーストのアプローチを使用しています。私が問題を抱えているモデルには、1対多の関係があります。私がやりたいことは、Person が作成されるたびに、Person (異なるテーブル) と共に複数のタスクをデータベースに保存することです。
これまでのところ、すべてではなく最初のタスクしか保存できません。
私のモデルは次のとおりです。
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}
正しい量の番号を受け取りました。ViewModel の使用は比較的一般的だと思っていましたが、チュートリアルやフォーラムで何をしたいのかわかりませんでした....
私の目標は、1 回のポストバックで 1 人あたり複数のタスクを保存できるようにすることです。アドバイスをいただければ幸いです。