Kendo MVC делает запрос POST для метода действия Index - PullRequest
0 голосов
/ 28 февраля 2019

Мы используем пользовательский интерфейс Telerik для ASP.NET version 2016.3.1118 и в соответствии с демонстрацией я настроил виджет ListView в cshtml, как показано ниже

Метод действия индекса контроллера

    [HttpGet]
    public async Task<ActionResult> Index()
    {
        PackagingModelWrapper model = _service.GetPackagingData();
        return View(model);
     }

Index.cshtml

@model Web.Models.PackagingModelWrapper
@(Html.Kendo().ListView<Web.Models.PackagingModel>(Model.PackagingItems)
        .Name("PackagingItems")
        .TagName("div")
        .ClientTemplateId("myTemplate")
        .DataSource(ds=>
        {
            ds.ServerOperation(false);                        
        })
)

<script type="text/x-kendo-tmpl" id="myTemplate">
   <div>
       <b>Sequence Number:</b>
       #= SequenceNumber #
   </div>    

Когда страница загружается, мы можем видеть ListView с элементами.Однако внутренне ListView также пытается сделать еще один вызов POST для Index метода действия.И поскольку у нас есть HttpGet для метода действия Index, вызов POST завершается неудачно.Мы можем проверить, что в Fiddler этот первый вызов HttpGet, а затем HttpPost.

Если я закомментирую ListView в cshtml, то это только один вызов HttpGet.Так что, безусловно, ListView является виновником здесь.Но не уверен, что я делаю неправильно

удаление HttpGet из метода Index не вариант, потому что это разрешит HttpPost в Index, а также два вызова - ненужные накладные расходы.

Обновление 1
После дополнительных исследований я нашел

  • Я инициализирую виджет ListView с данными.Мы также можем использовать метод BindTo() для передачи данных во время инициализации.Несмотря на это, основная проблема заключается в том, что когда данные равны null, ListView выполняет POST-вызов стандартному действию контроллера.В моем случае это метод Index текущего контроллера, потому что мой маршрут по умолчанию установлен как:

         routes.MapRoute(
             name: "Default",
             url: "{controller}/{action}/{id}",
             defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
    
  • Я не могу установить AutoBind() с true или false, этовыдает ошибку Cannot set AutoBind if widget is populated during initialization

  • Проблема не связана с виджетом ListView, а связана с datasource.Поэтому я предполагаю, что любой другой виджет, который использует источник данных, будет видеть то же самое поведение.(Хотя я не проверял другие виджеты.)
  • Мое текущее решение - передать пустое перечисление вместо нуля, и это решит проблему.

Тем не менее, я думаю, что это ошибка в кендо

...