C# 向Razor表单动态添加字段
我有一个Razor表单,其中包含我想动态添加项目的列表/表。您可以从下拉列表中选择项目,单击“添加”,下拉列表中的项目将添加到列表中。然后,当我提交表单时,我希望所有这些都通过C# 向Razor表单动态添加字段,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有一个Razor表单,其中包含我想动态添加项目的列表/表。您可以从下拉列表中选择项目,单击“添加”,下拉列表中的项目将添加到列表中。然后,当我提交表单时,我希望所有这些都通过POST发送,我的控制器的HttpPost方法可以处理输入 是否有一种方法可以动态添加字段,并且仍然能够在HttpPost函数中接受它们作为参数?每个组合框/hiddenfield/textbox/。。。包含在元素中的内容将在提交时发布。不管您是动态创建它们还是默认准备好它们。然而,最大的区别是,对于动态创建的绑定,您无法
POST
发送,我的控制器的HttpPost
方法可以处理输入
是否有一种方法可以动态添加字段,并且仍然能够在
HttpPost
函数中接受它们作为参数?每个组合框/hiddenfield/textbox/。。。包含在
元素中的内容将在提交时发布。不管您是动态创建它们还是默认准备好它们。然而,最大的区别是,对于动态创建的绑定,您无法真正利用我们习惯的整洁绑定。您还必须手动执行验证等操作
然后你会有一个这样的方法:
public ActionResult HandleMyPost(FormCollection form)
{
// enumerate through the FormCollection, perform validation etc.
}
第一个答案是正确的,因为您可以迭代表单集合,以获取表单元素中动态插入的字段的值。我只是想补充一点,你可以利用一些整洁的装订 下面的代码接受针对操作发布的文本框的动态列表。本例中的每个文本框都与
dynamicField
同名。MVC很好地将它们绑定到一个字符串数组中
完整的.NET小提琴:
示例代码(为清晰起见,使用片段)动态添加示例字段
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div id="fields"></div>
<button>Submit</button>
}
<div style="color:blue"><b>Data:</b> @ViewBag.Data</div>
<script type="text/javascript">
$(document).ready(function() {
var $fields = $('#fields');
$('#btnAddField').click(function(e) {
e.preventDefault();
$('<input type="text" name="dynamicField" /><br/>').appendTo($fields);
});
});
</script>
输出截图
不仅字符串数组,列表也可以工作
[HttpPost]
public ActionResult Index(string[] dynamicField)
{
ViewBag.Data = string.Join(",", dynamicField ?? new string[] {});
return View();
}