有人可以帮忙吗:
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>
请忽略这篇文章,我已经通过电话解决了这个问题
window.location.href = '/Controller/view?count=' + param
问题不在于我的 Ajax 调用未能调用该操作。问题是我没有刷新页面。
谢谢