mut*_*y91 10 c# asp.net-mvc razor
我有一个Razor表单,其中包含我想要动态添加项目的项目列表/表格.您可以从下拉列表中选择项目,单击"添加",下拉列表中的项目将添加到列表中.然后,POST当我提交表单并且我的控制器HttpPost方法可以处理输入时,我会喜欢所有这些.
有没有办法动态添加字段,仍然能够接受它们作为函数中的HttpPost参数?
Jas*_*n W 15
第一个答案是正确的,因为您可以遍历表单集合以获取表单元素中动态插入字段的值.我只是想补充一点,你可以利用一些整洁的绑定.
下面的代码接受针对操作发布的动态文本框的动态列表.此示例中的每个文本框都具有相同的名称dynamicField.MVC很好地将这些绑定到一个字符串数组中.
完整的.NET小提琴:https://dotnetfiddle.net/5ckOGu
示例代码(为清晰起见,代码段)动态添加示例字段
@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>
Run Code Online (Sandbox Code Playgroud)
接受帖子中动态字段的操作的示例代码.
[HttpPost]
public ActionResult Index(string[] dynamicField)
{
ViewBag.Data = string.Join(",", dynamicField ?? new string[] {});
return View();
}
Run Code Online (Sandbox Code Playgroud)
输出截图

元素中包含的每个组合框/隐藏字段/文本框/...<form>都会在提交时发布。无论您是即时创建它们还是默认准备好它们,这并不重要。然而,最大的区别是,对于动态创建的绑定,您无法真正利用我们习惯的那种简洁的绑定。您还必须手动执行验证等。
然后你就会有这样的方法:
public ActionResult HandleMyPost(FormCollection form)
{
// enumerate through the FormCollection, perform validation etc.
}
Run Code Online (Sandbox Code Playgroud)