Свойства типа объекта ViewModel в коллекции равны нулю на POST - PullRequest
0 голосов
/ 27 июня 2018

У меня есть представление, которое отображает входные данные для пользовательских типов полей. Они являются динамическими и настраиваются администраторами, каждое настраиваемое поле может быть int, DateTime, bool и т. Д. Из-за этого я сохраняю значения CustomField как object и возвращаю их в столбце sql_variant введите SQL Server. Модель представления для этого представления содержит коллекцию 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; }
}

Они отображаются в моем представлении с использованием цикла 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++;
    }
}

Они возвращаются в действие контроллера:

Request Body

Но свойство Value каждого CustomField равно нулю, все остальные свойства заполнены правильно.

Редактировать: Похоже, что это действительно вызвано привязкой к свойству типа object. Если я изменю свойство Value в CustomFieldViewModel на string, свойство будет правильно установлено в действии контроллера для Post.

...