Свойства типа объекта ViewModel в коллекции равны нулю на POST
У меня есть представление, которое отображает входные данные для пользовательских типов полей. Они являются динамическими и настраиваются администраторами, каждое настраиваемое поле может быть int
, DateTime
, bool
и т.д. Из-за этого я храню CustomField
значения как object
и поддержать их sql_variant
тип столбца в SQL Server. ViewModel для этого представления содержит коллекцию CustomFields
:
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; }
}
Они отображаются в моем View с использованием цикла for:
@{
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++;
}
}
Они возвращаются в действие контроллера:
Но Value
собственность каждого CustomField
имеет значение null, все остальные свойства заполнены правильно.
Редактировать: кажется, действительно вызвано привязкой к свойству типа object
, Если я изменю Value
недвижимость в CustomFieldViewModel
в string
свойство установлено правильно в действии контроллера на Post.