#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. Вы указываете, что ошибка не отображается в представлении?