This grid works for Read, Update (of existing record only) and Delete, but when Creating a new row, the Update button doesn't work. (When creating a new row, the Cancel button does work).
e.g.
After Reading data from server:
- Click Edit button on existing row. Make changes. Click Update. Success!
- Click Delete button on existing row. Success!
- Click Add new record button. New row appears. Click Cancel. Success!
- Click Add new record button. New row appears. Click Update. Nothing happens. Controller method is not called.
What is wrong?
Thanks
Grid:
@(Html.Kendo().Grid<
PublicUserMunicipalityViewModel
>()
.Name("publicUserMunicipalitiesGrid")
.Columns(columns =>
{
columns.Bound(u => u.Id).Hidden();
columns.Bound(u => u.PublicUserId).Hidden();
columns.Bound(u => u.UserId).Hidden();
columns.Bound(u => u.muni_code).Hidden();
columns.Bound(u => u.Municipality).ClientTemplate("#=Municipality.MuniCombo#");
columns.Bound(u => u.RequestedDate).Hidden();
columns.Bound(u => u.Granted).Hidden();
columns.Bound(u => u.CanSubmitForms).ClientTemplate("<
input
type
=
'checkbox'
disabled
=
'disabled'
#= CanSubmitForms ?
checked
=
'checked'
: '' # ></
input
>");
columns.Bound(u => u.SuperUser).ClientTemplate("<
input
type
=
'checkbox'
disabled
=
'disabled'
#= SuperUser ?
checked
=
'checked'
: '' # ></
input
>");
columns.Bound(u => u.IsCurrent).Hidden();
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(180);
})
.ToolBar(toolbar => toolbar.Create())
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(p => p.Id);
model.Field(p => p.Id);
model.Field(p => p.PublicUserId);
model.Field(p => p.UserId);
model.Field(p => p.muni_code);
model.Field(p => p.Municipality).DefaultValue(ViewData["defaultMunicipality"] as MunicipalityViewModel);
model.Field(p => p.RequestedDate);
model.Field(p => p.Granted);
model.Field(p => p.CanSubmitForms);
model.Field(p => p.SuperUser);
model.Field(p => p.IsCurrent);
})
.Read(read => read.Action("PublicUserMunicipalityViewModelsRead", "PublicUserMunicipalityViewModels")
.Data("getSelectedPublicUserId"))
.Create(create => create.Action("PublicUserMunicipalityViewModelsCreate", "PublicUserMunicipalityViewModels")
.Data("getSelectedPublicUserId"))
.Update(update => update.Action("PublicUserMunicipalityViewModelsUpdate", "PublicUserMunicipalityViewModels"))
.Destroy(destroy => destroy.Action("PublicUserMunicipalityViewModelsDestroy", "PublicUserMunicipalityViewModels"))
)
)
Controller Method:
public ActionResult PublicUserMunicipalityViewModelsCreate([DataSourceRequest]DataSourceRequest request, PublicUserMunicipalityViewModel publicUserMunicipalityViewModel, int publicUserId)
{
// Set UserId and PublicUserId
publicUserMunicipalityViewModel.PublicUserId = publicUserId;
var publicUser = db.PublicUsers.FirstOrDefault(pu => pu.Id == publicUserId);
publicUserMunicipalityViewModel.UserId = publicUser.UserId;
// Clear the ModelState errors these two required fields had as they were passed in null.
ModelState["PublicUserID"].Errors.Clear();
ModelState["UserID"].Errors.Clear();
if (ModelState.IsValid)
{
// Create a new PublicUserMunicipality entity and set its properties from the posted PublicUserMunicipalityViewModel
var entity = this.BuildPublicUserMunicipalityEntity(publicUserMunicipalityViewModel);
// Add the entity
db.PublicUserMunicipalities.Add(entity);
// Delete the entity in the database
db.SaveChanges();
// Get the Id generated by the database
publicUserMunicipalityViewModel.Id = entity.Id;
}
// Return the inserted contract. Also return any validation errors.
return Json(new[] { publicUserMunicipalityViewModel }.ToDataSourceResult(request, ModelState));
}