【发布时间】:2021-06-26 18:49:36
【问题描述】:
我有一个 Asp.Net Core MVC 应用程序,它可以搜索 youtube 视频并返回一个显示在屏幕上的列表。每个视频都放置在具有复选框的自定义组件中。每次选中一个复选框时,我都会访问一个脚本,该脚本会搜索屏幕上的所有视频组件,并将视频 ID 存储在我的 .cshtml 页面的列表中。
在某些时候,我需要获取此视频 ID 列表来进行处理。为此,我在同一个 .cshtml 页面中创建了一个 javascript 方法来返回这个 id 列表。 我已经对 Blazor (.razor) 页面上的 JSRuntime 进行了研究,但这不是我的情况。 事实是,通过单击按钮,我需要调用控制器方法,并且该方法调用我的 javascript 方法,该方法返回我的 id 列表。 如何最好地做到这一点?
这是我的 javascript 代码。
@section scripts
{
<script>
var listaDeIds = [];
function Mostrar() {
//document.getElementById("btnplaylist").style.display = 'block';
var videos = document.querySelectorAll('#video');
var count = 0;
var lista = [];
for (var i = 0; i < videos.length; i++) {
//console.log("1 - " + videos.item(i).getAttribute("name"));
var videoID = videos.item(i).getAttribute("name");
//console.log("2 - " + videos.item(i).getAttribute("id"));
const shadow = videos.item(i).shadowRoot;
const childNodes = Array.from(shadow.childNodes);
//console.log("3 - " + childNodes.length);
childNodes.forEach(childNode => {
if (childNode.nodeName === "DIV") {
//console.log("4 - " + childNode.nodeName);
const shadowChilds = Array.from(childNode.childNodes);
//console.log("5 - " + shadowChilds.length);
shadowChilds.forEach(shadowShild => {
if (shadowShild.nodeName === "DIV") {
//console.log("6 - " + shadowShild.nodeName);
const shadowChildsInternas = Array.from(shadowShild.childNodes);
//console.log("7 - " + shadowChildsInternas.length);
shadowChildsInternas.forEach(interna => {
if (interna.nodeName === "INPUT") {
//console.log("8 - Name " + interna.nodeName);
if (interna.checked === true) {
//console.log("9 - Checked: " + interna.checked);
lista[count] = videoID;
count = count + 1;
}
}
});
}
});
}
});
}
if (lista.length > 0) {
document.getElementById("btnplaylist").style.display = 'block';
} else {
document.getElementById("btnplaylist").style.display = 'none';
}
listaDeIds = lista;
}
function RetornaListaDeIds() {
return listaDeIds;
}
</script>
这是我的html组件代码
<custom-iframe id="video" name="@item.Id.VideoId" urlvideo='@Url.Content(item.Url)' onclick="Mostrar()"></custom-iframe>
<div id="btnplaylist" class="right_side hidden">
<button value="Playlist" asp-controller="VideoSearch" asp-action="GravarSelecionados" class="btn green-button button-tamanho-padrao">Playlist</button>
</div>
我控制的代码。
【问题讨论】:
-
为什么不通过 AJAX 将 ID 列表直接发送到您的控制器?
-
能否提供示例代码?
-
您也可以使用新的 JavaScript Fetch API:w3schools.com/js/js_api_fetch.asp
标签: javascript c# asp.net-mvc