Microsoft JScript runtime error: "data.EmployeeDetails.EmployeeId" is null or not an object

HI I am stuck with getting the data that I need to display in kendo UI GRID. Initially, I can see the button and the text box and the grid, but when I enter the value in the text box and then press the button, I need to show that the entered values ​​in the UI GRID kendo ...

When I launched this application in google chrome, it gave an empty grid after entering the value, and then click the submit button, but when I launched this file in IE8, it gave an error like this at the very initial stage ....

Unhandled exception at line 238, column 37 in Function code 0x800a138f - Microsoft JScript runtime error: 'data.EmployeeDetails.EmployeeId' is null or not an object

and this is my model

  public class TextBoxGrid { public string EnteredValue { get; set; } public List<EmployeeDetails> employees; } public class ParentViewModel { public EmployeeDetails EmployeeDetails { get; set; } public TextBoxGrid TextBoxGrid { get; set; } } public class EmployeeDetails { public string EmployeeId { get; set; } public string ManagerId { get; set; } } 

this is my controller

 public class EnterValuesGridController : Controller { private static List<EmployeeDetails> empdtls; public ActionResult Index( ParentViewModel model) { var viewmodel = new ParentViewModel { TextBoxGrid = new TextBoxGrid { employees = GetEmployee().ToList() } }; return View(viewmodel); } [HttpPost] public ActionResult PostValues(TextBoxGrid model) { TempData["enteringValue"] = model.EnteredValue; var viewmodel = new ParentViewModel { TextBoxGrid = new TextBoxGrid { employees = GetEmployee().ToList() } }; //ParentViewModel p = new ParentViewModel(); //TextBoxGrid t = new TextBoxGrid(); //t.EnteredValue = "a"; //TempData["a1"] = t.EnteredValue; //t.employees = GetEmployee().ToList(); //p.TextBoxGrid = t; //return View("Index", p); return View("Index", viewmodel); } public IEnumerable<EmployeeDetails> GetEmployee() { string enteredValueId =(string) TempData["enteringValue"]; string managerId = "M" +enteredValueId; empdtls = new List<EmployeeDetails>(); EmployeeDetails em1 = new EmployeeDetails(); em1.EmployeeId = enteredValueId; em1.ManagerId = managerId; empdtls.Add(em1); return empdtls.AsEnumerable(); } public ActionResult Orders_Read([DataSourceRequest]DataSourceRequest request) { return Json(GetOrders().ToDataSourceResult(request)); } private IEnumerable<EmployeeDetails> GetOrders() { return GetEmployee().AsEnumerable(); } } 

and this is my opinion

 @model KendoPratapSampleMVCApp.Models.ParentViewModel @{ ViewBag.Title = "Index"; } @using (Html.BeginForm("PostValues", "EnterValuesGrid", FormMethod.Post)) { @Html.TextBoxFor(m=>m.TextBoxGrid.EnteredValue) <input type="submit" name="Submitbutton1" value="Submit1" /> @(Html.Kendo().Grid<KendoPratapSampleMVCApp.Models.ParentViewModel>() .Name("grid") .Columns(columns => { columns.Bound(s=>s.EmployeeDetails.EmployeeId).Filterable(false).Width(100); columns.Bound(s => s.EmployeeDetails.ManagerId).Filterable(false).Width(100); }) .Filterable() .HtmlAttributes(new { style = "height:430px;" }) .DataSource(dataSource => dataSource .Ajax() .PageSize(20) .Read(read => read.Action("Orders_Read", "EnterValuesGrid")) ) ) } 

I am not sure where I am going wrong. Could you suggest any ideas on this. Thank you very much .... I need to make any changes to the UI GRID. I tried changing the post values ​​method ... but it didnot work for me ...

UPDATE: changed tempData to view bag ...

  [HttpPost] public ActionResult PostValues(ParentViewModel model) { ViewBag.item = model.TextBoxGrid.EnteredValue; var viewmodel = new ParentViewModel { TextBoxGrid = new TextBoxGrid { employees = GetEmployee().ToList() } }; //ParentViewModel p = new ParentViewModel(); //TextBoxGrid t = new TextBoxGrid(); //t.EnteredValue = "a"; //TempData["a1"] = t.EnteredValue; //t.employees = GetEmployee().ToList(); //p.TextBoxGrid = t; //return View("Index", p); return View("Index", viewmodel); } public IEnumerable<EmployeeDetails> GetEmployee() { string enteredValueId = (string)ViewBag.item; string managerId = "M" +enteredValueId; empdtls = new List<EmployeeDetails>(); EmployeeDetails em1 = new EmployeeDetails(); em1.EmployeeId = enteredValueId; em1.ManagerId = managerId; empdtls.Add(em1); return empdtls; } 
0
source share
2 answers

Hi pratap, I am just updating your code,

Model

  public class TextBoxGrid { public string EnteredValue { get; set; } public List<EmployeeDetails> employees; } public class ParentViewModel { public EmployeeDetails EmployeeDetails { get; set; } public TextBoxGrid TextBoxGrid { get; set; } } public class EmployeeDetails { public string EnteredValue { get; set; } public string EmployeeId { get; set; } public string ManagerId { get; set; } } 

View

 @model TwoModelInSinglePageModel.EmployeeDetails @{ ViewBag.Title = "Index"; } <script src="~/Script/Jquery-1.8.1.min.js" type="text/javascript"></script> <script src="~/Script/jquery-ui-1.8.20.min.js" type="text/javascript"></script> <script src="@Url.Content("~/Script/kendo.all.min.js")" type="text/javascript"></script> <script src="~/Script/kendo.web.min.js" type="text/javascript"></script> <script src="~/Script/kendo.aspnetmvc.min.js" type="text/javascript"></script> @using (Html.BeginForm("PostValues", "Test", FormMethod.Post)) { @Html.TextBoxFor(m => m.EnteredValue) <input type="submit" name="Submitbutton1" value="Submit1" /> @(Html.Kendo().Grid<TwoModelInSinglePageModel.EmployeeDetails>() .Name("grid") .Columns(columns => { columns.Bound(s => s.EmployeeId); columns.Bound(s => s.ManagerId); }) .Filterable() .HtmlAttributes(new { style = "height:430px;" }) .DataSource(dataSource => dataSource .Ajax() .PageSize(20) .Read(read => read.Action("Orders_Read", "Test")) ) ) } 

controller

 private static List<EmployeeDetails> empdtls; public ActionResult PostValues() { return View(); } [HttpPost] public ActionResult PostValues(EmployeeDetails model) { ViewBag.item = model.EnteredValue; ParentViewModel viewmodels = new ParentViewModel { TextBoxGrid = new TextBoxGrid { employees = GetEmployee().ToList() } }; ParentViewModel viewmodel = new ParentViewModel(); EmployeeDetails em1 = new EmployeeDetails(); for (int i = 0; i < viewmodels.TextBoxGrid.employees.Count(); i++) { em1.EmployeeId = viewmodels.TextBoxGrid.employees[i].EmployeeId; em1.ManagerId = viewmodels.TextBoxGrid.employees[i].ManagerId; viewmodel.EmployeeDetails = em1; } Session["EM1"] = em1; return View("PostValues", em1); } public List<EmployeeDetails> GetEmployee() { string enteredValueId = (string)ViewBag.item; string managerId = "M" + enteredValueId; empdtls = new List<EmployeeDetails>(); EmployeeDetails em1 = new EmployeeDetails(); em1.EmployeeId = enteredValueId; em1.ManagerId = managerId; if (Session["EM1"] != null) { em1 = Session["EM1"] as EmployeeDetails; empdtls.Add(em1); Session["EM1"] = null; } else { empdtls.Add(em1); } return empdtls; } public ActionResult Orders_Read([DataSourceRequest]DataSourceRequest request, EmployeeDetails model) { return Json(GetEmployee().ToDataSourceResult(request)); } 
+1
source

Ok, I read your post again, and you want to submit the form when you actually click the button. So try putting the value in the session

 Session["enteringValue"] = model.EnteredValue; 

And you can get it with

 string enteredValueId = (string)(Session["enteringValue"]); 
0
source

Source: https://habr.com/ru/post/1491563/


All Articles