#jquery #asp.net-core
Вопрос:
Я пытаюсь передать массив в параметр действия, который представляет собой список int. Я хочу сделать это с помощью jQuery, и в URL он должен отображаться
/compare?ids=1amp;ids=2amp;ids=5
У него может быть так много идентификаторов, и количество идентификаторов не ограничено.
Я перепробовал так много решений и много искал, но они не помогли.
Это то, что я пробовал, но в параметре действия он возвращает количество 0.
Это мой jQuery:
var pIds = [];
$('input:hidden.ids').each(function () {
pIds.push($(this).val());
});
console.log(pIds);
var json = JSON.stringify(pIds);
console.log(json);
$.map(data.Value, function (element) {
resultList.append('<li><a href="/Compare?"' json '>'
'<span class="search__result-item search__result-icon
search__result-icon--search">'
element.Title
' </span><span class="search__result-item--category">'
element.Price
"</span></a></li>");
});
Это метод действия:
[HttpGet]
public async Task<IActionResult> ProductsCompare(List<int> ids)
{
ViewBag.ids = ids;
var products = await productGlobalService.ShowProductsForCompare(ids);
return View(products.Value);
}
Когда я регистрирую массив в консоли, он возвращает идентификаторы в виде массива, но я не знаю, как передать его в href.
Ответ №1:
Вы можете построить массив следующим образом
$('input:hidden.ids').each(function() {
pIds.push(`ids=${$(this).val()}`);
});
а затем соедините их вместе, как pIds.join('amp;')
Кроме того, вы можете использовать шаблонные литералы, чтобы сделать ваш код немного более читабельным
var pIds = [];
$('input:hidden.ids').each(function() {
pIds.push(`ids=${$(this).val()}`);
});
console.log(pIds);
$.map(data.Value, function(element) {
resultList.append(
`<li><a href="/Compare?${pIds.join('amp;')}">
<span class="search__result-item search__result-icon
search__result - icon--search ">${element.Title}
</span><span class="search__result-item--category">${element.Price}
</span></a></li>`
);
});