Невозможно связать данные с сеткой Kendo ui.

Вот мой метод действий

 public ActionResult Kendo([DataSourceRequest]DataSourceRequest request )
    {
        var emp = EmployeeManager.GetAllEmployees();

        DataSourceResult result = emp.ToDataSourceResult(request);
        return Json(result);
    }


Это мой код сетки, который я взял с официального сайта.

@model IEnumerable<MyProject.Web.Models.EmployeeViewModels.EmployeeViewModel>

@используя Kendo.Mvc.UI;

@(Html.Kendo().Grid<TalentPro.Employees.Employee>()
      .Name("grid")
      .DataSource(dataSource => dataSource //Configure the Grid data source.
          .Ajax() //Specify that Ajax binding is used.
          .Read(read => read.Action("Kendo", "Home")
          ) //Set the action method which will return the data in JSON format.

       )
      .Columns(columns =>
      {
          //Create a column bound to the ProductID property.
          columns.Bound(product => product.Id);
          //Create a column bound to the ProductName property.
          columns.Bound(product => product.FirstName);
          //Create a column bound to the UnitsInStock property.
          columns.Bound(product => product.LastName);
          columns.Bound(product => product.EmailId);
          columns.Bound(product => product.PhoneNumber);
      })
      .Pageable() // Enable paging
      .Sortable() // Enable sorting

)

Я ознакомился с официальной документацией, которая помогла мне интегрировать пользовательский интерфейс Kendo с моим проектом Asp.net core. Но я понятия не имею, где я ошибся, это не привязка данных к сетке.

Я пробовал несколько способов, но бесполезно. Может ли кто-нибудь помочь мне решить эту проблему.
Заранее спасибо.


person Natarajan Nagarajugari    schedule 27.07.2017    source источник


Ответы (2)


Наконец-то получил решение Это изменения, которые я сделал

  1. изменен ActionResult на JsonResult
  2. Еще одна строка ниже добавлена ​​в startup.cs
    ".AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());"
    Спасибо за коби
person Natarajan Nagarajugari    schedule 28.07.2017

В вашем методе контроллера замените

return Json(result);

с участием

return Json(result, JsonRequestBehavior.AllowGet);

По умолчанию MVC использует DenyGet из соображений безопасности, поэтому вам нужно вручную установить для него значение AllowGet, иначе он не вернется правильно.

Важно отметить, что это может подвергнуть небольшую уязвимость возвращаемому объекту JSON, если используется более старая версия браузера (это было исправлено с ). Это должно быть проблемой только в том случае, если вы передаете особо конфиденциальную информацию И ваши пользователи могут получить доступ к странице из устаревших браузеров.

Вы можете прочитать больше по теме ЗДЕСЬ и ЗДЕСЬ.

person Coby G.    schedule 27.07.2017
comment
JsonRequestBehavior устарел в ядре 1.0. По чьему-то предложению я изменил ActionResult на JsonResult . Но бесполезно - person Natarajan Nagarajugari; 28.07.2017
comment
Прошу прощения, я не заметил версию, которую вы используете. Вы также можете попробовать заменить возвращаемый тип на IActionResult и заменить Json (результат) на Ok (результат). Типы возврата ActionResult, JsonResult и IActionResult должны работать одинаково с возвратом Json, поэтому я больше не уверен, что это ваша проблема. - person Coby G.; 28.07.2017
comment
Вы установили точку останова в методе контроллера, чтобы увидеть, что он вызывается? Какие-то ошибки вылетают? - person Coby G.; 28.07.2017