C# 将MVC中的复杂对象数组与具有“添加”按钮的页面绑定
我有以下课程C# 将MVC中的复杂对象数组与具有“添加”按钮的页面绑定,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有以下课程 public class RegistrationFieldsetSettingInfo { public RegistrationFieldsetSettingInfo() { Fields = new List<FieldInfo>(); } public List<FieldInfo> Fields { get; set; } } public class FieldInfo { publi
public class RegistrationFieldsetSettingInfo
{
public RegistrationFieldsetSettingInfo()
{
Fields = new List<FieldInfo>();
}
public List<FieldInfo> Fields { get; set; }
}
public class FieldInfo
{
public string Key { get; set; }
// removed other properties to simplify the question
}
公共类注册字段集设置信息
{
公共注册FieldSettingInfo()
{
字段=新列表();
}
公共列表字段{get;set;}
}
公共类字段信息
{
公共字符串密钥{get;set;}
//删除了其他属性以简化问题
}
我有一个剃须刀视图如下。它有一个“添加”按钮,用于添加一行新的输入,这实际上是一个新的FieldInfo对象。下面的工作正常,但是现在我想我需要添加jquery来修改新行中所有字段的索引,它看起来很笨拙。有更好的方法吗?你知道我如何添加jquery魔法来自动填充索引吗
for (int i = 0; i < Model.Fields.Count(); i++)
{
if (!String.IsNullOrWhiteSpace(Model.Fields[i].Title))
{
<div class="form-row">
@Html.Hidden("Fields.index", $"{i}")
<div class="col-auto">
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">Field name</div>
</div>
@Html.TextBox($"Fields[{i}].Key", Model.Fields[i].Key, new { @class = "form-control", size = "10" })
</div>
</div>
}
}
<div class="copy-fields">
<div class="form-row">
@Html.Hidden("Fields.index", "100")
<div class="col-auto">
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">Field name</div>
</div>
@Html.TextBox("Fields[100].Key", "", new { @class = "form-control", size = "10" })
</div>
</div>
</div>
</div>
<div class="after-add-more"></div>
<button type="button" class="btn btn-link add-more">
Add field
</button>
<script>
$(document).ready(function () {
$(".add-more").on('click', function () {
var html = $(".copy-fields").clone();
$(".after-add-more").before(html[0]);
html.find('input').val('');
});
});
</script>
for(int i=0;i
这是我在MVC中获得绑定数据的唯一方法
解决方案:
好的,我想出了一个简单的方法来处理这个问题。我做的控制器签名是这样的
[HttpPost]
public ActionResult AddEditSpecial(RegistrationFieldsetSettingInfo settingInfo, string[] Titles, string[] Keys, FieldType[] Types, bool[] Mandatories)
{
settingInfo.Fields = new List<FieldInfo>();
for (var i = 0; i < Titles.Length; i++)
{
if (!String.IsNullOrWhiteSpace(Titles[i]) && !String.IsNullOrWhiteSpace(Keys[i]))
{
settingInfo.Fields.Add(new FieldInfo
{
Title = Titles[i],
Key = Keys[i],
Type = Types[i],
Mandatory = Mandatories[i]
});
}
}
return base.AddEdit(settingInfo);
}
[HttpPost]
public ActionResult AddEditSpecial(注册字段设置信息设置信息、字符串[]标题、字符串[]键、字段类型[]类型、布尔[]强制)
{
settingInfo.Fields=新列表();
对于(变量i=0;i
并将razor中的所有字段修改为平面字段,即代替字段[{i}]。Key或字段[100]。Key,我只是将它们设置为“Key”。因此,它们最终在控制器中作为一个单独的参数,我只是编写一些代码将它们添加到实际对象中。不是很漂亮,但却是我能想到的最好的。是否有一些jquery可以在提交之前自动为索引编号?