我有一个班级foo
:
public class Foo {
public String Name;
public List<bar> BarList;
}
我的应用程序的数据层只接受新的foo
,如果它包含至少一个新的bar
。
我需要一个允许创建新foo
的视图,并根据需要添加尽可能多的bar
,然后将其发布到应用程序的数据层。
到目前为止,我已经能够发布新foo
的数据,但我无法在视图中创建bar
的列表以便与其一起发布。我觉得我需要使用部分视图,但是我无法让它们正常工作。
答案 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;
}