What am I doing wrong. I have a grid that refuses to post back to the proper action in the controller. It continually goes back to the (get) Index action even though in the grid I am calling an action called Cleanup_Update. When initially calling the page Cleanup_Read works fine. Only when editing the inside of the grid and hitting save changes is it not going where it should go.
Thanks in advance
View
@{
ViewData["Title"] = "Index";
}
@Html.AntiForgeryToken()
<
h2
>Index</
h2
>
@(Html.Kendo().Grid<
FacilityDataManagerMVC.Models.ViewModels.ErrorCleanup
>
()
.Name("grid")
.Columns(columns =>
{
columns.Bound(c => c.ID).Width(150);//.Hidden(true);
columns.Bound(c => c.stationAssetID).Width(140).Filterable(ftb => ftb.Multi(true).CheckAll(true));
columns.Bound(c => c.stationID).Width(140).Filterable(ftb => ftb.Multi(true).CheckAll(true));
columns.Bound(c => c.errorType).Width(110).Filterable(ftb => ftb.Multi(true).CheckAll(true));
columns.Bound(c => c.readingDate).Width(110).Format("{0:MM/dd/yyyy}").Filterable(ftb => ftb.Multi(true).CheckAll(true));
//columns.Bound(c => c.errorCorrected).Width(25);
//change the column above to a checkbox
columns.Bound(c => c.errorCorrected).ClientTemplate("<
input
type
=
'checkbox'
disabled
=
'true'
value
=
'#= errorCorrected #'
" + " # if (errorCorrected) { #" + "
checked
=
'checked'
" + "# } #" + "/>");
columns.Bound(c => c.operatingHours).Width(25);
columns.Bound(c => c.totalDowntimeHours).Width(25);
columns.Bound(c => c.horsepowerHours).Width(25);
columns.Bound(c => c.fuelConsumed).Width(25);
columns.Bound(c => c.engineStartAttempts).Width(25);
columns.Bound(c => c.engineStartFailed).Width(25);
columns.Bound(c => c.engineStartSuccess).Width(25);
columns.Bound(c => c.startupDuration).Width(25);
columns.Bound(c => c.throughputMMCF).Width(25);
columns.Bound(c => c.averageUnitRPM).Width(25);
columns.Bound(c => c.oilUsageCompressor).Width(25);
columns.Bound(c => c.oilUsageEngine).Width(25);
columns.Bound(c => c.oilUsageManual).Width(25);
})
.ToolBar(toolbar =>
{
toolbar.Save();
})
.Editable(editable => editable.Mode(GridEditMode.InCell))
.Sortable()
.Filterable()
.Pageable()
.Navigatable()
.DataSource(dataSource => dataSource
.Ajax()
.Batch(true)
.PageSize(20)
.ServerOperation(false)
.Events(events => events.Error("error_handler"))
//set the fields to non-editable here
.Model(model =>
{
model.Field(p => p.ID).Editable(false);
model.Field(p => p.stationID).Editable(false);
model.Field(p => p.readingDate).Editable(false);
model.Field(p => p.errorType).Editable(false);
model.Field(p => p.stationAssetID).Editable(false);
model.Field(p => p.errorCorrected).Editable(false);
})
.Read(read => read.Action("Cleanup_Read", "Cleanup").Data("sendAntiForgery"))
.Update(update => update.Action("Cleanup_Update", "Cleanup").Data("sendAntiForgery"))
)
)
<
script
type
=
"text/javascript"
>
function error_handler(e) {
if (e.errors) {
var message = "Errors:\n";
$.each(e.errors, function (key, value) {
if ('errors' in value) {
$.each(value.errors, function () {
message += this + "\n";
});
}
});
alert(message);
}
}
</
script
>
<
script
type
=
"text/javascript"
>
function sendAntiForgery() {
return { "__RequestVerificationToken": $('input[name=__RequestVerificationToken]').val() }
}
</
script
>
<
style
>
.k-readonly {
color: gray;
}
</
style
>
Controller
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using FacilityDataManagerMVC.Data;
using FacilityDataManagerMVC.Models.ViewModels;
using Kendo.Mvc.UI;
using Kendo.Mvc.Extensions;
namespace FacilityDataManagerMVC.Controllers
{
public class CleanupController : Controller
{
private readonly FacilityDataManagerMVCContext _context;
public CleanupController(FacilityDataManagerMVCContext context)
{
_context = context;
}
// GET: Cleanup
public ActionResult Index()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult IndexPost([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<
ErrorCleanup
> errors)
{
if (errors != null && ModelState.IsValid)
{
foreach (var product in errors)
{
//productService.Update(product);
string x = "mystring";
}
}
return Json(errors.ToDataSourceResult(request, ModelState));
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Cleanup_Update([DataSourceRequest] DataSourceRequest request, [Bind]IEnumerable<
ErrorCleanup
> errors)
{
if (errors != null && ModelState.IsValid)
{
foreach (var product in errors)
{
//productService.Update(product);
string x = "mystring";
}
}
return Json(errors.ToDataSourceResult(request, ModelState));
}
public IActionResult Cleanup_Read([DataSourceRequest] DataSourceRequest request)
{
return Json(getScadaErrors().ToDataSourceResult(request));
}
private IEnumerable<
ErrorCleanup
> getScadaErrors()
{
using (_context)
{
return _context.ScadaErrors.Select(scadaError => new ErrorCleanup
{
ID = scadaError.Id,
stationAssetID = scadaError.StationAssetId,
stationID = scadaError.StationId,
errorType = scadaError.ErrorType,
readingDate = scadaError.ReadingDate,
operatingHours = scadaError.OperatingHrs,
totalDowntimeHours = scadaError.TtlDowntimeHrs,
horsepowerHours = scadaError.HrsepwrHrs,
fuelConsumed = scadaError.FuelConsumed,
engineStartAttempts = scadaError.EngineStartsAttempts,
engineStartFailed = scadaError.EngineStartsFailed,
engineStartSuccess = scadaError.EngineStartsSuccess,
startupDuration = scadaError.StartupDuration,
throughputMMCF = scadaError.ThruputMmcf,
averageUnitRPM = scadaError.AvgUnitRpm,
oilUsageCompressor = scadaError.OilToCompCyl,
oilUsageManual = scadaError.OilNewCcHand,
errorCorrected = scadaError.ErrorCorrected
//blowdownCount = (int)scadaError.BlowdownCnt
}
).ToList();
}
}
}
}