【发布时间】:2021-12-14 12:26:18
【问题描述】:
我有一个 razor 页面,其中 evrything 显示正常,但我需要能够读取几个控制器中的值,以便在调用中将它们作为参数传递以预过滤某些数据:
@page
@addTagHelper*, Microsoft.AspNetCore.Mvc.TagHelpers
@model MyApp.Pages.IndexModel
@{
ViewData["Title"] = "MyApp";
}
<div class="col-12 border p-3 mt-3">
<h3>Filters</h3>
<div class="col-12">
<select id="portMultiselect" name="lsPorts" asp-items="@Model.Ports" multiple></select>
<input id="searchString" type="text" name="searchString">
</div>
</div>
@* A "REFRESHABLE" TABLE GOES HERE...*@
@section scripts{
@* REFRESH SCRIPT *@
<script type="text/javascript">
$(function () {
setInterval(loadTable, 60000);
loadTable();
});
function loadTable() {
var select1 = document.getElementById("portMultiselect");
var selectedPorts = [];
for (var i = 0; i < select1.options.length; i++) {
if (select1.options[i].selected) selectedPorts.push(select1.options[i].value);
}
var searchString = document.getElementById('searchString').value;
if (searchString != "" || selectedPorts.length != 0) {
debugger;
}
fetch('/Index?handler=IndexPartial', {
data: {
searchString: searchString,
selectedPorts: selectedPorts
}
})
.then((response) => {
return response.text();
})
.then((result) => {
document.getElementById('refreshable').innerHTML = result;
});
}
</script>
}
如您所见,我试图在我的多选和文本输入中捕获选定的值,以作为刷新脚本中的参数传递。
我正确地到达了预期的端点,但我从来没有得到任何值(它总是空的和零)我什至在 Javascript 代码中添加了一个调试器,我从来没有遇到过。
为什么我无法读取这些值?
编辑: 我见过其他处理这些问题的方法,例如数据绑定,但正如 here 所提到的,避免页面重新加载的唯一方法是 javascript 和 AJAX,所以我仍然需要从 javascript 中获取这些值。
【问题讨论】:
-
您不能使用数据绑定来更轻松地获取这些值吗?
-
@T.Trassoudaine 如果我添加带有帖子的数据绑定,则整个页面都会刷新,这不是我想要的,我只想刷新部分视图,使用这些控件的值过滤数据有
-
你应该使用
select1.options.length,而不是select1.length。