问候所有人!
我在将数据发送到Controller时绑定复杂对象 FullAddress
查看:
<fieldset>
<legend>Address</legend>
<div class="form-group">
<div class="col-md-7">
<textarea asp-for="FullAddress.AddressLine" class="form-control"></textarea>
<span asp-validation-for="FullAddress.AddressLine" class="text-danger" />
</div>
<div class="row col-md-3 col-md-offset-1" >
<input asp-for="FullAddress.IsPrimary" checked="checked" type="radio" value="true" class="col-md-1" style="width:5px;" />
<span class="col-md-4">primary</span>
<input type="button" value="+" class="btn btn-sm btn-default col-md-1" style="width:9px;" onclick="addAddressTxtField()">
</div>
</div>
<div id="addresses-to-add"></div>
</fieldset>
模型:
public class CreatePersonViewModel
{
public AddressVm FullAddress { get; set; }
}
public class AddressVm {
public string AddressLine { get; set; }
public bool IsPrimary { get; set; }
}
到目前为止,每个人都很开心。但是,突然之间,我使用Javascript将类似的html代码添加到我的div中。
JS:
function addAddressTxtField() {
var html = '<div class="form-group" style="display:none"><div class="col-md-7">'
+ '<textarea class="form-control" name=FullAddress.AddressLine"></textarea>'
+ '<span class="text-danger field-validation-valid" data-valmsg-replace="true" data-valmsg-for="FullAddress.AddressLine"></span>'
+'</div><div class="row col-md-3 col-md-offset-1">'
+ '<input class="col-md-1" type="radio" name="FullAddress.IsPrimary" data-val-required="The IsPrimary field is required." data-val="true" style="width:5px;" value="true">'
+'<span class="col-md-4">primary</span>'
+ '<input class="btn btn-sm btn-default col-md-1" type="button" style="width:9px;" value="-" onclick="removeTextfield(this)"></div></div>'
var newAddressTxtfield = $('#addresses-to-add').append(html);
newAddressTxtfield.children().show('slow'); };
这导致用户输入有两个textareas和两个单选按钮。对?因此我被迫使用我的AddressVm模型的集合。像这个:
public IList<AddressVm> AddressList { get; set; }
所以这并不适合我的代码,因为我不能使用for循环来分配字段。当然,我可以做丑陋的事情 - 硬编码括号和索引。
像这样:
<textarea asp-for="AddressList[0].AddressLine" class="form-control"></textarea>
<span asp-validation-for="AddressList[0].AddressLine" class="text-danger" />
稍后创建js变量,每次用户添加新输入字段时都会迭代,但这不是我想要的。理想情况下,我想使用IEnumerable或任何同样&#34; clean&#34;。你推荐什么是我的问题的最佳解决方案?也许我应该使用 IDictionary 或创建自定义模型绑定?任何帮助将不胜感激。