从模型为列表的视图向数据库添加新值

时间:2014-10-23 13:06:36

标签: c# asp.net asp.net-mvc entity-framework

在ASP.NET-MVC 5应用程序中,我有以下模型

class Employee {
 int EmployeeID {get;set;}
 string FirstName {get;set;}
 List<OfficeLocations> OfficeLocations {get;set;}
}

class OfficeLocations {
 int OfficeLocationsID {get;set;}
 //foreign key
 int EmployeeID {get;set;}
 string Value1 {get;set;}
 string Value2 {get;set;}
}

我有一个编辑视图,用于修改或添加员工可能属于的不同办公地点。它看起来像这样:

@model List<Project.Models.OfficeLocations>
 @for (int i = 0; i < Model.Count; i++) {
  @Html.EditorFor(m => m[i].CitLocation, new { htmlAttributes = new { @class = "my_editor" } })
  @Html.HiddenFor(m => m[i].OfficeLocationsID)
  @Html.HiddenFor(m => m[i].EmployeeID)
 }
 //extra editor box for adding a new value
 @Html.Editorfor(??????.Value)

我对如何在数据库表中向模型(列表)中添加新条目感到有些困惑。我将什么放在额外的Editorfor框的参数中(其中所有的????都是

另外,控制器动作方法会是什么样子?

2 个答案:

答案 0 :(得分:1)

更改你的viewmodel以获得一个官方分配和一个官方分配列表......你可以在你额外的编辑框中添加非列表的官方分配对象...或者你可以保留你的viemodel,只需手动创建一个使用jquery建模并使用ajax jquery传递它...

答案 1 :(得分:0)

要解决此问题,我想出了以下javascript:

<script>

    $(document).ready(function () {
        index = 0;
    });

    $('#add_button').click(function () {

        var placeHolderNameAttribute = "List2[#].Value1";
        var indexedNameAttribute = "List2[" + index + "].Value1";

        var placeHolderIdAttribute = "new_lastName_input";
        var indexedIdAttribute = "new_lastName_input" + index;

        document.getElementById(placeHolderIdAttribute).name = indexedNameAttribute;
        document.getElementById(placeHolderIdAttribute).id = indexedIdAttribute;

        var clone1 = $("#new_lastName_input" + index).clone();

        document.getElementById(indexedIdAttribute).name = placeHolderNameAttribute;
        document.getElementById(indexedIdAttribute).id = placeHolderIdAttribute;

        if (index == 0) {
            $('#nlnPlaceHolder').remove();
        }
        $('#LN_editor_box').append(clone1);
        index += 1;
    });

</script>

和以下占位符输入字段

<input id="new_lastName_input" class="my_editor" type="text" name="List2[#].Value1" value="New Last Name"  />

现在我的控制器post方法接受两个参数,即更新/编辑的值的原始列表,以及仅新值的新列表。

ActionResult myMethod(List<OfficeLocations> list1, OfficeLocations[] list2)

如果值在list1中,那么它将在数据库中更新,如果它在list2中,它将被添加