MVC更新相关数据

时间:2017-08-18 09:46:21

标签: c# asp.net-mvc

我与3张桌子有多对多的关系。员工,历史和职称。历史记录表包含时间跨度以及与员工和职位的关系。

最后,我希望能够从一个共同的视图中编辑每个员工的时间跨度和标题。在employeeController.cs我提交表单时获得了此代码。

[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public ActionResult Edit(employee empl) // Note: I have no bindings here, either. Should I?
    if (ModelState.IsValid)
    {
        db.Entry(empl).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(empl);
}

但是对象empl在其历史记录集合中没有任何内容。它只是说Count = 0。如何同时包含我的历史记录(以及后来的标题表),以便我也可以更新它?

我的一些employee.cs

public partial class employee
{
    public employee()
    {
        this.Histories = new HashSet<Histories>();
    }
    public virtual ICollection<Histories> Histories { get; set; }
}

供参考,这在员工的Edit.cshtml中正确显示:

<table class="table">
<tr>
    <th>Start date</th>
    <th>End date</th>
    <th>Title</th>
</tr>
@foreach (var item in Model.Histories.OrderByDescending(x => x.fromdate))
{
    <tr>
        <td>
            @Html.EditorFor(modelItem => item.fromdate)
        </td>
        <td>
            @Html.EditorFor(modelItem => item.todate)
        </td>
        <td>
            @Html.EditorFor(modelItem => item.Title.Title)
        </td>
    </tr>
}
</table>

如果需要更多信息,请随时提出,并对任何错别字表示抱歉。我必须将所有课程名称翻译成英语,以便您更好地理解。

1 个答案:

答案 0 :(得分:0)

使用这样的东西:

            for (int i = 0; i <  Model.Histories.OrderByDescending(x => x.fromdate).Count(); i++)
            {
                <tr>
                    <td>
                        @Html.HiddenFor(modelItem => Model.Histories[i].fromdate)                            
                        @Html.EditorFor(modelItem => Model.Histories[i].fromdate)                            
                    </td>
                    <td>
                        @Html.HiddenFor(modelItem => Model.Histories[i].todate)                            
                        @Html.EditorFor(modelItem => Model.Histories[i].todate)   
                    </td>
                    <td style="text-align: center">
                        @Html.HiddenFor(modelItem => Model.Histories[i].Title.Title)                            
                        @Html.EditorFor(modelItem => Model.Histories[i].Title.Title)                             
                    </td>
                </tr>
            }