Мы используем пользовательский интерфейс 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
.Поэтому я предполагаю, что любой другой виджет, который использует источник данных, будет видеть то же самое поведение.(Хотя я не проверял другие виджеты.) - Мое текущее решение - передать пустое перечисление вместо нуля, и это решит проблему.
Тем не менее, я думаю, что это ошибка в кендо