问题描述:在ASP .NET MVC中动态创建的字段无法绑定到FormCollection。
解决方法:
// ViewModel
public class MyViewModel
{
public string Field1 { get; set; }
public string Field2 { get; set; }
// 动态字段
public Dictionary DynamicFields { get; set; }
}
// 视图
@model MyViewModel
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Field1)
@Html.TextBoxFor(m => m.Field2)
@foreach (var item in Model.DynamicFields)
{
@Html.TextBox(item.Key, item.Value)
}
}
// 控制器
[HttpPost]
public ActionResult MyAction(MyViewModel model)
{
// 处理表单数据
// model.Field1, model.Field2 和 model.DynamicFields 可以访问表单数据
return View();
}
// 视图
@using (Html.BeginForm())
{
@foreach (var item in ViewBag.DynamicFields)
{
}
}
// 控制器
[HttpPost]
public ActionResult MyAction()
{
var dynamicFields = new Dictionary();
foreach (string key in Request.Form.Keys)
{
if (!string.IsNullOrEmpty(key) && key.StartsWith("dynamic_"))
{
string value = Request.Form[key];
dynamicFields.Add(key, value);
}
}
// 处理表单数据
// dynamicFields 包含所有动态字段的值
return View();
}
注意:使用ViewModel的方式更加推荐,因为它提供了类型安全,更易于维护和测试。