Свойства типа объекта 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.

0 ответов

Другие вопросы по тегам