Как передать массив в параметр действия в виде списка с помощью jQuery в ASP.NET Сердечник

#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>`
  );
});