Мое первое предложение - абстрагировать вашу логику в контроллер.Цикл for, который считывает ваши данные в вашу сетку, может быть помещен в ваш метод Controller и считан в данные таким образом.Что касается вашей ошибки при редактировании, я не вижу реальных звонков, чтобы сделать редактирование.Вы вызываете свой метод ResourcePlanning внутри контроллера «Project».Не видя этот код, трудно сказать, в чем может быть ошибка.Вот пример проекта, который у меня есть.Вам не нужно ничего читать в реальном файле cshtml, особенно если вы используете Ajax-вызовы.Это также исключает необходимость отправки модели в ваш View.Надеюсь, что эти примеры кода помогут вам.
Мое представление индекса:
@(Html.Kendo().Grid<PSAViewModel>().Name("psa-grid")
.Columns(columns =>
{
columns.Bound(c => c.CreatedAt).Format("{0:MM/dd/yyyy}");
columns.ForeignKey(c => c.ProductionLineId, (System.Collections.IEnumerable)ViewData["ProductionLines"], "Id", "Name");
columns.Command(command => { command.Edit(); }).HtmlAttributes(new { style = "width: 10%" });
})
.ToolBar(toolbar => toolbar.Create().Text("New PSA Request"))
.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(ds =>
ds.Ajax()
.ServerOperation(false)
.Model(model =>
{
model.Id(p => p.Id);
//GUID of Medium Voltage line for default
model.Field(p => p.ProductionLineId).DefaultValue("2a23cec5-226f-47be-b97b-cebca5736fa5");
})
.Read(read => read.Action("GetPSAList", "PSA"))
.Create(create => create.Action("CreateNewPSA", "PSA"))
.Update(update => update.Action("EditPSAInLine", "PSA"))
)
.Filterable()
.Sortable()
.Pageable()
)
Метод редактирования My Controller.
[HttpPost]
public ActionResult EditPSAInLine([DataSourceRequest] DataSourceRequest request, PSAViewModel psavm)
{
if(psavm != null && ModelState.IsValid)
{
PSA psa = _psaService.Find(psavm.Id);
psa.ProductionLineId = psavm.ProductionLineId;
psa.ProdLine = _productionLineService.Find(psavm.ProductionLineId);
_psaService.Update(psa);
}
return this.Json(new[] { psavm }.ToDataSourceResult(request, ModelState));
}