如何在ASP.MVC中添加包含新对象列表的新对象

时间:2016-09-12 11:41:17

标签: c# asp.net-mvc

我有一个班级foo

public class Foo {
    public String Name;
    public List<bar> BarList;
}

我的应用程序的数据层只接受新的foo,如果它包含至少一个新的bar

我需要一个允许创建新foo的视图,并根据需要添加尽可能多的bar,然后将其发布到应用程序的数据层。

到目前为止,我已经能够发布新foo的数据,但我无法在视图中创建bar的列表以便与其一起发布。我觉得我需要使用部分视图,但是我无法让它们正常工作。

1 个答案:

答案 0 :(得分:1)

模型:首先你需要拥有属性(同时设置get)

 public class Foo
{
    public string Name
    {
        get; set;
    }
    public List<Bar> BarList
    {
        get; set;
    }
}
public class Bar
{
    public string Name{
        get; set;
    }
}

查看: 在MVC中,如果任何html控件的名称与模型同步,那么该html控件的值将自动绑定到该属性。

@model Foo
@using (Html.BeginForm("Index", "Default", FormMethod.Post))
{
<span> Name:</span>
@Html.TextBoxFor(m => m.Name)
<span>  List of Bars</span>
for (int i = 0; i < 10; i++)
{
    @Html.TextBoxFor(m => m.BarList[i].Name)
   //or
   //   <input type="text" name="BarList[@i].Name" />

}
<input type="submit" value="save" />
}

单击按钮(提交表单),完成数据将绑定到您的操作的foo参数。

控制器:

   [HttpPost]
    public ActionResult Index(Foo foo)
    {
        return View();
    }

编辑: 如果要添加动态行,则下面是代码 添加新按钮和div,您将添加新行

 <div id="divBar"></div>
 <button type="button" onclick="AddnewRow()">Add new Row</button>

声明jquery方法

<script>
var i=0;
function AddnewRow()
{
    var string = '<input type="text" name="BarList[' + i + '].Name" /><br/>';
    $('#divBar').append(string);
    i = i + 1;
}
</script>

完成此页后的完整页面

<script src="~/scripts/jquery-1.10.2.min.js"></script>
@using (Html.BeginForm("Index", "Default", FormMethod.Post))
{
<span> Name:</span>
@Html.TextBoxFor(m => m.Name)
<span>  List of Bars</span>

<div id="divBar"></div>
<button type="button" onclick="AddnewRow()">Add new Row</button>
<input type="submit" value="save" />
}
<script>
var i=0;
function AddnewRow()
{
    var string = '<input type="text" name="BarList[' + i + '].Name" /><br/>';
    $('#divBar').append(string);
    i = i + 1;
}