I am using an editor template to provide custom behavior in my grid when a user edits a record. The editor template .cshtml file is as follows:
@model string
@Html.TextBoxFor(s => s, new { id ="gradingSubItemGrade", @class="k-textbox" })
<script type="text/javascript">
$(document).ready(function () {
$('#gradingSubItemGrade').bind('keypress', function (e) {
if (e.keyCode == 13) {
var barcode = e.currentTarget.value;
GetJSON('/API/CoinReferenceInformation/ByBarcode?barcode=' + barcode,
function (data) {
$('#gradingSubItemGrade').val(data.Grade + data.GradeNumber);
},
function () { });
}
});
})
</script>
As you can probably see from the code sample, I am trying to send the text of the TextBox to a service (when [Enter] is pressed), then, upon receiving a response, override it with the results.
This almost works...the response comes back correctly, and the results are displayed in the TextBox. However, what is saved is what the user entered, not what is returned by the service.
Are there additional steps I need to do to notify the grid that the text has changed?
@(Html.Kendo().Grid<DigiBob.AppServices.ViewModels.Governance.Duties.AdhocTaskViewModel>() .Name("Grid") .Columns(columns => { columns.Bound(p => p.ShortDescription).Width(50); columns.Command(command => { command.Edit(); command.Destroy(); }).Width(160); }) .ToolBar(toolbar => { toolbar.Create(); }) .Editable(ed=>ed.Mode(GridEditMode.PopUp).TemplateName("AdhocTask")) .Pageable() .Sortable() .Scrollable() .Filterable() .DataSource(dataSource => dataSource .Ajax() .PageSize(20) .Events(events => events.Error("error_handler")) .Model(model => model.Id(c => c.ID)) .Create(update => update.Action("CreateAdhocTask", "Home")) .Read(read => read.Action("GetAllAdhocTasks", "Home")) .Update(update => update.Action("UpdateAdhocTask", "Home")) .Destroy(update => update.Action("DestroyAdhocTask", "Home")) ) )[AcceptVerbs(HttpVerbs.Post)] public ActionResult CreateAdhocTask([DataSourceRequest] DataSourceRequest request, AdhocTaskViewModel item) { if (item != null && ModelState.IsValid) { _adhocTaskRepository = new AdhocTaskRepository(_context); AdhocTask target = new AdhocTask(); target.ShortDescription = item.ShortDescription; _adhocTaskRepository.Insert(target); _adhocTaskRepository.Save(); item.ID = target.ID; } return Json(new[] { item }.ToDataSourceResult(request, ModelState)); }@using (Ajax.BeginForm("UpdateSearchCriteria", "Home", new AjaxOptions() { HttpMethod = "post", OnSuccess = "Update" })){ @(Html.Kendo().DatePickerFor(model => model.Criteria.StartDate) .Min(new DateTime(1900, 1, 1)) //Set min date of the datepicker .Max(new DateTime(2099, 12, 31)) //Set min date of the datepicker ) @(Html.Kendo().DatePickerFor(model => model.Criteria.EndDate) .Min(new DateTime(1900, 1, 1)) //Set min date of the datepicker .Max(new DateTime(2099, 12, 31)) //Set min date of the datepicker ) @(Html.Kendo().IntegerTextBoxFor(model => model.Criteria.Number).Min(1)) @(Html.Kendo().AutoCompleteFor(model => model.Criteria.CityName) .Filter("contains") .MinLength(3) .BindTo(Common.Helpers.CityHelper.GetCityNames()) .HighlightFirst(true) .IgnoreCase(true) ) <input type="submit" value="Search!" />}@(Html.Kendo().Grid<Models.SearchResult>() .Name("SearchResultDataGrid") .Columns(columns => { columns.Bound(p => p.Property.PropertyName).Title("Property"); columns.Bound(p => p.Range).Title("Range"); columns.Bound(p => p.Number).Title("Number"); }) .Sortable() .Scrollable() .AutoBind(false) .BindTo(Model.SearchResult) .DataSource(dataSource => dataSource // Configure the grid data source .Ajax() // Specify that ajax binding is used .Read(read => read.Action("Search", "Home")) // Set the action method which will return the data in JSON format ) )<script> function Update(response, status, data) { var grid = $("#SearchResultDataGrid").data("kendoGrid"); grid.dataSource.read(); } </script>public ActionResult UpdateSearchCriteria(Screen iModel) { return Json(iModel); }[HttpPost] public ActionResult Search(Screen iModel) { [...] return Json(theDataSourceRS); }Dim dropDownListFor = _htmlHelper.Kendo().DropDownListFor(Of Integer)(_expression) _ .BindTo(New SelectList(_collectionValeur, "Id", "Name")) _ .HtmlAttributes(_attributsHtml)1.public ActionResult ViewDetails(long[] contactId)2.{3. ViewData["contactId"] = contactId;4. return View();5.}01.@{02. ViewBag.Title = "ViewDetails";03. Layout = "~/Views/Shared/_Layout.cshtml";04.}05. 06.<h2>ViewDetails</h2>07. 08. 09.@(10. 11. @Html.Kendo().Grid<DetailGridViewModel>()12. .Name("Grid")13. .Columns(columns =>14. {15. columns.Bound(p => p.ContactId).Hidden();16. columns.Bound(p => p.ContactNumber);17. columns.Bound(p => p.ContactName);18. columns.Bound(p => p.Date).Width(130).Format("{0:d}");19. columns.Bound(p => p.ContactStatus);20. columns.Bound(p => p.Type); 21. columns.Command(command =>22. {23. 24. }).Width(200);25. 26. })27. 28. 29. .Sortable( )30. .Resizable(resize => resize.Columns(true))31. .Filterable()32. .DataSource(dataBinding =>33. dataBinding.Ajax().Aggregates(agg => { agg.Add(com => com.Value).Sum();34. agg.Add(p => p.ContactCost).Sum();35. }).Read(read => read.Action("_SelectDetails", "Contacts").Data(obj => new {contactId = ViewData["contactId"]}))))36. 01.public ActionResult _SelectDetails([DataSourceRequest] DataSourceRequest request,long[] contactId)02.{03. List<DetailGridViewModel> finalList = new List<DetailGridViewModel>();04. foreach (var conId in contactId)05. {06. var con = _contactService.GetContactById(conId);07. IEnumerable<DetailGridViewModel> coms = con.Select(x => new DetailGridViewModel(x)); 08. finalList.AddRange(coms);09. }10. 11. return Json(finalList.ToDataSourceResult(request));12.}@model string@using System.Collections<div style="white-space:nowrap;"> @Html.TextBoxFor(m => m, new { onclick = "setInvisible(\"SplitCountryList#=Rid#\")", onfocus = "setInvisible(\"SplitCountryList#=Rid#\")", id = "CoPrefSplit#=Rid#" }) <button id="SplitCountryDisplay" onclick="setVisibleAndFocus('\\#SplitCountryList#=Rid#','\\#SplitCountryCombo-input')" style="background-color:White; width: 20px; height:22px; font-size: 6pt">...</button></div><div id="SplitCountryList#=Rid#" style="position: absolute; overflow:visible; width:250px; z-index:99; margin-top: 0px; visibility:hidden;">@(Html.Kendo().ComboBoxFor(m => m) .Name("SplitCountryCombo#=Rid#") .BindTo(new SelectList((IEnumerable)ViewData["Countries"], "Code", "DisplayName")) .HtmlAttributes(new {@ArticleID = "#=Rid#"}) .Filter(FilterType.Contains) .Events(events => events .Change("onSplitCountryChanged") ) )</div>