Почему мое состояние модели недопустимо для свойства Id в моей сетке Кендуи при пакетном обновлении?

#asp.net-core #kendo-ui #entity-framework-core

Вопрос:

У меня есть сетка Кендуи в моем ASP.NET Основное веб-приложение, которое использует пакетное обновление для своих операций. По какой-то причине, когда я сохраняю свои изменения, сетка обновляется неправильно. Я исследовал контроллер и обнаружил, что состояние модели возвращалось недопустимым. При более внимательном рассмотрении этой ошибки поле, в котором произошел сбой, было «Id».

Я посмотрел на содержимое модели, которое было передано с использованием точки останова в моем действии, и я вижу, что идентификатор был установлен на «0», это то, что я ожидал бы увидеть, поскольку это новые создаваемые записи. Итак, почему идентификатор не проходит проверку модели?

Вот мой код:

Сетка

Пожалуйста, обратите внимание: @localID-это идентификатор модели (представления), он используется здесь в качестве дополнительного параметра, потому что у нас нет другого способа передать его в сетку, поскольку сетка отделена от представления и поэтому нам неизвестно, какой идентификатор нам нужно захватить в качестве.

 <kendo-grid name="requirement_position_periods_@localId">
        <datasource type="DataSourceTagHelperType.Ajax" page-size="5" batch="true" server-operation="false">
            <transport>
                <read url="/Test/ReadPeriods" data="getClientDataModel(@localId)" />
                <create url="/Test/AddPeriod" data="getClientDataModel(@localId)" />
            </transport>
            <schema>
                <model id="Id">
                    <fields>
                        <field name="Id" editable="false" />
                        <field name="Commencement" editable="true" type="date" />
                        <field name="RequirmentId" editable="true" type="number" />
                        <field name="Fixed" editable="false" />
                    </fields>
                </model>
            </schema>
        </datasource>
        <toolbar>
            <toolbar-button template="period_heading"></toolbar-button>
            <toolbar-button name="create" text=" " icon-class="k-icon k-i-plus-outline"></toolbar-button>
            <toolbar-button name="save" text=" " icon-class="k-icon k-i-save"></toolbar-button>
            <toolbar-button name="cancel" text=" " icon-class="k-icon k-i-cancel"></toolbar-button>
        </toolbar>
        <editable mode="incell" />
        <sortable enabled="true" />
        <scrollable enabled="false" />
        <filterable enabled="false" />
        <columns>

            <column selectable="true" hidden="true" width="20" template="<label class='check-container'><input type='checkbox' /><span class='checkmark'></span></label>"></column>
            <column field="Id" title="Id" hidden="true" />
            <column field="Commencement" title="Commencement" format="{0:dd/MM/yyyy}" />            
            <column field="Duration" title="Duration" />
            <column field="Frequency" title="Frequency" />    
        </columns>
    </kendo-grid>
 

FixtureOption.cs

 {
    public class RequirementOption : BaseEntity
    {
        public int RequirementId { get; set; }
        public int PeriodId { get; set; }
        public int? Duration { get; set; }
        public string Frequency { get; set; }
    }
}
 

Добавить период

int Id передается в качестве дополнительного параметра и всегда имеет значение. Удаление этого не меняет проблему, с которой я сталкиваюсь.

 [HttpPost]
public IActionResult AddPeriod([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<RequirementPeriod> periods, int Id)
        {
            var results = new List<RequirementPeriod>();

            if (periods != null)
            {
                foreach (var period in periods)
                {
                    period.RequirementId = Id;
                    if (ModelState.IsValid)
                    {
                        try
                        {
                            _requirementPeriodService.InsertRequirementPeriod(period);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }
                    results.Add(period);
                }
            }

            return Json(results.ToDataSourceResult(request, ModelState));
        }
 

Ошибка
Ошибка в точке останова.

Я не уверен, почему идентификатор 0 не работает, но это так, и мне нужна помощь, чтобы разобраться в этом, так как сетка не обновляется правильно из-за этого, хотя запись добавлена.

Комментарии:

1. Вы указываете, что ошибка не отображается в представлении?