集合中的ViewModel对象类型属性在POST上为null

时间:2018-06-27 17:26:11

标签: asp.net-core asp.net-core-mvc model-binding devextreme

我有一个View,该视图呈现自定义字段类型的输入。这些是动态的,由管理员配置,每个自定义字段可以是intDateTimebool等。因此,我将CustomField的值存储为{{1} },并在SQL Server中通过object列类型对其进行备份。此视图的ViewModel包含sql_variant的集合:

CustomFields

这些在我的视图中使用for循环呈现:

public class EditDataViewModel
{
    public Guid RecordId { get; set; }
    public IList<CustomFieldViewModel> CustomFields { get; set; }
}

public class CustomFieldViewModel
{
    public Guid? CustomFieldId { get; set; }
    public Guid CustomFieldTypeId { get; set; }
    public CustomFieldDataType DataType { get; set; }
    public bool IsRequired { get; set; }
    public string DisplayName { get; set; }
    public object Value { get; set; }
}

这些确实会发回到控制器操作中:

Request Body

但是每个@{ int i = 0; foreach (CustomFieldViewModel customField in Model.CustomFields) { @Html.Hidden($"CustomFields[{i}].CustomFieldId", customField.CustomFieldId) @Html.Hidden($"CustomFields[{i}].CustomFieldTypeId", customField.CustomFieldTypeId) @Html.Hidden($"CustomFields[{i}].DataType", customField.DataType) @Html.Hidden($"CustomFields[{i}].IsRequired", customField.IsRequired) @Html.Hidden($"CustomFields[{i}].DisplayName", customField.DisplayName) <div> <label>@customField.DisplayName</label> <div> @if (customField.DataType == CustomFieldDataType.Boolean) { @(Html.DevExtreme().CheckBox() .Name($"CustomFields[{i}].Value") .Value(customField.Value != null ? (bool)customField.Value : false) ) } else if(customField.DataType == CustomFieldDataType.Date) { @(Html.DevExtreme().DateBox() .Name($"CustomFields[{i}].Value") .Value((DateTime?)customField.Value) ) } // etc... </div> </div> i++; } } 的{​​{1}}属性为null,所有其他属性均已正确填充。

编辑:这似乎确实是由于绑定到类型Value的属性引起的。如果我将CustomField中的object属性更改为Value,则在Post上的控制器操作中正确设置了该属性。

0 个答案:

没有答案