c# - 通过 POST 从 View 发送里面有其他 complexObject[] 的 complexObj
问题描述
我必须发送 TestArr 填写Name
的输入表单以及 0, 1 或很多ComplexObj
sTestArr
不幸的是,我对嵌套表单的实现并没有ComplexObj[]
很好地绑定 - 它只是不起作用。知道怎么做吗?我试过了,BeginCollectionItemCore
但在那种情况下它并没有真正为我工作
public class TestArr
{
[Key]
public int Id { get; set; }
public string Name { get; set;}
public ComplexObj[] complex { get; set; }
}
public class ComplexObj
{
[Key]
public int Id { get; set; }
public string a { get; set; }
public string b { get; set; }
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Name, complex")] TestArr input)
{
if (ModelState.IsValid)
{
_context.Add(input);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View();
}
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div id="ComplexObj">
<label class="control-label">a</label>
<input asp-for="complex[0].a" class="form-control" />
<label class="control-label">b</label>
<input asp-for="complex[0].b" class="form-control" />
<label class="control-label">a</label>
<input asp-for="complex[1].a" class="form-control" />
<label class="control-label">b</label>
<input asp-for="complex[1].b" class="form-control" />
</div>
<button type="button" id="addComplex" onclick="test()">addComplex</button>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
编辑
怎么回事?我改为complex
in Complex
,TestArr
它[Bind()]
开始View
工作
但是当我从 javascript as 动态生成输入表单时.innerHTML +=
,它会停止......
<script>
var counter = 0;
function test()
{
var div = document.getElementById('ComplexObj');
div.appendChild +=
`
<label class="control-label">a</label>
<input asp-for="Complex[${counter}].a" class="form-control" />
<label class="control-label">b</label>
<input asp-for="Complex[${counter}].b" class="form-control" />
`;
counter++;
}
</script>
哪个浏览器呈现为:
<label class="control-label">a</label>
<input asp-for="Complex[0].a" class="form-control">
<label class="control-label">b</label>
<input asp-for="Complex[0].b" class="form-control"></div>
所以,整个 div 看起来像:
<div id="ComplexObj" style="height: 200px;">
<label class="control-label">a</label>
<input asp-for="Complex[0].a" class="form-control">
<label class="control-label">b</label>
<input asp-for="Complex[0].b" class="form-control">
</div>
但 Controller 将其视为null
.
解决方案
解决方案是:
改变:
<input asp-for="Complex[0].b" class="form-control">
至:
<input name="Complex[0].b" class="form-control">
推荐阅读
- ruby - 在 Cucumber 场景运行时检查可见文本是否显示在 DOM 中
- java - Spring Framework HandleInterceptor 不解析 x-www-urlencoded 主体
- c++ - 在 Qt creator 的发布模式下设置断点
- api - 如何使用活动 ID 获取联系人列表 - Mailchimp API
- c# - 从前一天开始的EMA指数移动平均线问题
- python - Intellj python 测试:运行单独的 Django 测试
- c++ - C++ IntelliSense 指向包含库的错误版本
- pandas - AttributeError:“int”对象在使用带有数据框的 itertuples() 方法时没有属性“count”
- django - 如何将其中两个结合起来并创建一个带有新字段的新序列化程序
- postgresql - 如何在更新前插入(自定义审核)