Tengo una función que después de agregar elementos en un bucle for llama al controlador a través de la URL de la acción enviando el parámetro arr (arreglo), veo que envía los datos pero aparece nulo en el parámetro del controlador. queria saber que puede estar mal?
Función JavaScript
function Submit() { QRCodeval.forEach((code) => arr.push(code.innerHTML)); window.location.href = "@Url.Action("ReceivedFromBarCode","PurchaseOrder")?" +arr; }Enlace generado por el controlador:
http://localhost:56978/PurchaseOrder/ReceivedFromBarCode?JJJKP,RRPRQ,PPLQR
Controlador donde obtengo nulo en el parámetro arr.
public async Task<ActionResult> ReceivedFromBarCode(string[] arr) { return View(); }El enlazador de modelos MVC espera que las matrices se pasen en el siguiente formato: arr=value1&arr=value2&...
Puede usar map() y join() para crear el formato correcto. Pero también deberá codificar los valores, ya que son parámetros en una URL. encodeURIComponent puede ayudar con eso:
let urlParams = array.map((val) => { return `arr=${encodeURIComponent(val)}` }).join('&'); window.location.href = "@Url.Action("ReceivedFromBarCode","PurchaseOrder")?" + urlParams; Y agregue los urlParams a su URL. Salida de ejemplo en el fragmento a continuación:
let array = ["value1", "http://example.com?x=1", "<script>alert('')</sctipt>"]; let urlParams = array.map((val) => { return `arr=${encodeURIComponent(val)}` }).join('&'); console.log(urlParams);