ASP MVC Core、Telerik Grid 在 Ajax 调用后不刷新

问题描述 投票:0回答:1

有人可以帮忙吗:

 I am trying to use an html select to send, via an ajax call, the selected count value to the controller to reload a Telerik Kendo grid with the amount of database rows in the count.  
 I think this issue is do to some error that I have with my Ajax call and the Controller.  I default the grid count to 50 on load with the following in _Layout.cshtml.  

<li class="nav-item">
     <a class="nav-link text-dark" asp-area="" asp-controller="LocalOptions" 
        asp-action="KendoTest" asp-route-count="50">KendoTest</a>
</li>

问题:网格加载了 50 行。然后,当我从下拉列表中选择 ie: 500 时,ajax 函数调用控制器操作,并将参数计数和 ViewData["SelectedOption"] 设置为 500。然后在 Views 第一个 Razor @{ } 代码块中,数据库调用触发并使用新的数据列表重新填充列表 CurrOptionData。
问题是 Kendo 网格永远不会重新加载新行,它保留在初始 50 处。我可以在浏览器中的 URL 末尾键入 500,然后网格刷新 正确的行数。

注意:我尝试使用 $("#dataGrid").data("kendoGrid").dataSource.read();和
$("#dataGrid").data("kendoGrid").refresh();在ajax成功中:但没有变化。

任何帮助将不胜感激。

谢谢

戴夫。

*********  LocalOptionsController.cs *********

 public IActionResult KendoTest(int count)
 {
     ViewData["Selected`your text`Option"] = count;
     return View();
 }

************ 查看************

此代码块使用传入的计数调用 GetCurrOptionsByCount 来自 ViewData[ ] 并填充对象列表调用 CurrOptionData

 @{
List<CurrOption>? CurrOptionData;
int countToDisplay = 50;
int loadedRows = 50;

countToDisplay = Convert.ToInt32(ViewData["SelectedOption"]);
loadedRows = countToDisplay;

CurrOptionData = await _db.GetCurrOptionsByCount(countToDisplay);

 }

<div>
<table>
    <tr>
        <td style="padding: 0 15px; text-align: center;">
            Select Current Options To Display:
        </td>
        <td style="text-align: center;">
        <select name="options" id="OptionCount" style="height: 25px;">
                <option value="">--Please choose an option--</option>
                <option value="50">50</option>
                <option value="100">100</option>
                <option value="500">500</option>
                <option value="1000">1000</option>
                <option value="10000">10000</option>
                <option value="100000">100000</option>
                <option value="200000">200000</option>
                <option value="300000">300000</option>
                <option value="400000">400000</option>
            </select>
        </td>
    </tr>
</table>
</div>   

我的 Kendo 网格在 Razor 代码中定义。

@(

Html.Kendo().Grid(CurrOptionData)
     .Name("dataGrid")
     .Columns(columns =>
     {
    columns.Bound(p => p.ID).Title("ID").Width(105);
    columns.Bound(p => p.USID).Title("USID").Width(120);
    columns.Bound(p => p.SellID).Title("SellID").Width(130);
    columns.Bound(p => p.OptionID).Title("OptionID").Width(170);
     })
    .Pageable()
    .Sortable()
    .Scrollable(scr => scr.Height(430))
    .Filterable()
    .DataSource(dataSource => dataSource
    .Ajax()
    .PageSize(20)
    .ServerOperation(false)
    )
    )
}

<script>   

Ajax 调用来调用 Action KendoTest 来重新加载并刷新所选计数 我的下拉列表。

document.getElementById('OptionCount').addEventListener('change', function () {
    var selectedValue = this.value;       

    $.ajax({
        url: '@Url.Action("KendoTest", "LocalOptions")',
        type: 'GET',
        data: { count: selectedValue }, 
        success: function () {

            $("#dataGrid").data("kendoGrid").dataSource.read();
            $("#dataGrid").data("kendoGrid").refresh();
        
        },
        error: function () {
            console.log('Error occurred during the AJAX call.');
        }
    });

});  


</script>
asp.net ajax model-view-controller telerik core
1个回答
0
投票

请忽略这篇文章,我已经通过电话解决了这个问题

window.location.href = '/Controller/view?count=' + param

问题不在于我的 Ajax 调用未能调用该操作。问题是我没有刷新页面。

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.