使用ViewModel EF ASP插入一对多关系数据.净MVC



我试图弄清楚如何使用一个视图模型插入多行数据与一个回发。我使用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; }
}

ViewModel:

    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是比较常见的,但我没有看到我想在任何教程或论坛....

我的目标是能够用一次回发保存每个人的多个任务。任何建议将不胜感激!

在你的ViewModel你只有一个任务,应该是一个任务列表对吗?当我做这样的事情时,我通常先保存Person对象,然后使用ajax向其添加任务。

方法可以是这样的:

public void SaveTasks(List<Task> tasks){
    //important that tasks already have personId --set on client side
    foreach(var task in Tasks){
      //do some validation
      db.Tasks.Add(task);
    }
    db.SaveChanges();
}

相关内容

  • 没有找到相关文章

最新更新