将文本框的动态列表绑定到字符串列表模型
本文关键字:列表 绑定 字符串 模型 动态 文本 | 更新日期: 2023-09-27 18:04:50
我有一个视图模型,它包含一个属性:
public List<string> TeamNames = new List<string>();
用户将看到一个表单,该表单最初只包含一个输入团队名称的文本框。但是,用户可以通过javascript添加另一个文本框来添加另一个团队名称。
我的问题是-我怎么能把这些动态文本框绑定到我的列表在我的视图模型?
首先,在表单上创建一个Hidden输入。然后使用JQuery创建这些文本框。毕竟,在提交数据之前,只需序列化这个隐藏字段中的数据。最后,只需在服务器端反序列化它,然后做任何你想做的。
例如on load
that.onLoad = function () {
var listString = that.hidden.value;
that.list = $.parseJSON(listString);
}
在提交:
function updateHidden() {
that.hidden.value = JSON.stringify(that.list);
}
如果初始列表为空并且要动态创建,则不需要将空列表传递给视图。这是你需要的简化版本。
控制器:
public class TestController : Controller
{
// GET: Test
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult AddTeams()
{
// you do not need to pass anything if you list is empty
return View();
}
[HttpPost]
public ActionResult AddTeams(List<string> teamNames)
{
// do whatever you want with your teamnames
return RedirectToAction("Index");
}
}
视图:
@using (Html.BeginForm("AddTeams", "Test", FormMethod.Post))
{
<table id="teams-list">
<tr>
<td>Team name:</td>
<td><input type="text" name="teamNames[0]" /></td>
</tr>
</table>
<button type="button" id="add-btn">Add one more team</button>
<br/>
<button type="submit">submit</button>
}
<script>
$('#add-btn').on('click', function() {
var currentTeamCount = $('#teams-list tr').length;
$('#teams-list tr:last').after('<tr><td>Team name:</td><td><input type="text" name="teamNames[' + currentTeamCount + ']" /></td></tr>');
});
</script>