Hi,
Ok, so I have a grid, strangely enough called "grid". On it I have .Editable(e => e.Mode(GridEditMode.InCell) set. Everything works great. My data annotations do their job and catch errors. However, one of the columns has a unique index on it. I catch duplicate errors in a try/catch block on the server when they hit save. I add a Model error, but nothing is displayed.
The error message never shows. What am I missing?
Thanks … Ed
@(Html.Kendo().Grid<
RoomsModel.RoomModel
>()
.Name("grid")
.ToolBar(t =>
{
t.Create().Text("Add New"); t.Save().Text("Save Changes");
})
.HtmlAttributes(new { style = "height: 650px;" })
.Editable(e => e.Mode(GridEditMode.InCell) //.TemplateName("RoomEditTemplate")
.Window(w => w.Title("Room").Width(650)))
.Columns(columns =>
{
columns.Bound(t => t.Id).Visible(false);
if (((IEnumerable<
Property
>)ViewData["Properties"]).Count() > 1)
{
columns.ForeignKey(t => t.PropertyId, (System.Collections.IEnumerable)ViewData["Properties"],
"Id", "PropertyName").Width(125);
}
columns.Bound(c => c.RoomNumber).Title("Room Number").Width(125);
columns.Bound(c => c.RoomName).Title("Room Name").Width(120);
columns.Command(command =>
{
//command.Edit().Text("Edit/View Details");
command.Destroy();
}).Width(150);
})
.HtmlAttributes(new { style = "margin-left:3px" })
.Resizable(resize => resize.Columns(true))
.Selectable(s => s.Mode(GridSelectionMode.Single).Type(GridSelectionType.Row))
.Scrollable()
.Filterable()
.Sortable()
.Pageable() //p => { p.PageSizes(true); })
.DataSource(ds =>
ds.Ajax()
.Batch(true)
.Events(ev => ev.Error("errorHandler"))
.Read(r => r.Url("?handler=RoomsRead").Data("forgeryToken"))
.Update(u => u.Url("?handler=RoomsUpdate").Data("forgeryToken"))
.Create(c => c.Url("?handler=RoomsCreate").Data("forgeryToken"))
.Model(m =>
{
m.Id(t => t.Id);//.Editable(false);
})
.PageSize(10)
)
)
public IActionResult OnPostRoomsCreate([DataSourceRequest] DataSourceRequest request,
[Bind(Prefix = "models")]IEnumerable<
RoomsModel.RoomModel
> Rooms)
{
Room rm;
List<
RoomModel
> lstResults = new List<
RoomModel
>();
if (ModelState.IsValid)
{
try
{
using (TransactionScope oScope = new TransactionScope())
{
if (Rooms != null && ModelState.IsValid)
{
foreach (var r in Rooms)
{
rm = new Room();
rm.RoomName = r.RoomName;
.
.
.
_db.Rooms.Add(rm);
_db.SaveChanges();
RoomModel rmm = new RoomModel();
rmm.Id = rm.Id;
.
.
.
lstResults.Add(rmm);
}
}
oScope.Complete();
}
}
catch (Exception ex)
{
var sqlException = ex.InnerException as SqlException;
if (sqlException != null && sqlException.Errors.OfType<
SqlError
>()
.Any(se => se.Number == 2601 || se.Number == 2627 /* PK/UKC violation */))
{
StatusMessage = "Error: Room number already used.";
ModelState.AddModelError("RoomNumber", StatusMessage);
return new JsonResult(new[] { lstResults.ToDataSourceResult(request, ModelState) });
}
}
}
return new JsonResult(new[] { lstResults.ToDataSourceResult(request, ModelState) });
}