Sto provando a passare un array di int da JavaScript a un controller MVC che accetta 2 parametri: un array int e un int. Questo è per eseguire un reindirizzamento di pagina alla vista restituita dall'azione del controller.Passare un array int a MVC Controller
var dataArray = getAllIds(); //passes back a JavaScript array
window.location.replace("/" + controllerName + "/EditAll?ids=" + dataArray + "¤tID=" + dataArray[0])
dataArray contiene 1,7 come previsto per l'utilizzo del mio esempio.
Codice controller
public virtual ActionResult EditAll(int[] ids, int currentID)
{
currentModel = GetID(currentID);
currentVM = Activator.CreateInstance<ViewModel>();
currentVM.DB = DB;
currentVM.Model = currentModel;
currentVM.ViewMode = ViewMode.EditAll;
currentVM.ModelIDs = ids;
if (currentModel == null)
{
return HttpNotFound();
}
return View("Edit", MasterName, currentVM);
}
Il problema è che durante l'ispezione le int [] ids passati al controllore, il suo valore è nullo. currentID è impostato su 1 come previsto.
Ho provato a impostare jQuery.ajaxSettings.traditional = true che non ha effetto Ho anche provato a creare un URL lato server utilizzando @ Url.Action in JavaScript. Ho anche provato JSON.Stringify prima di passare l'array ad es.
window.location.replace("/" + controllerName + "/EditAll?ids=" + JSON.stringify(dataArray) + "¤tID=" + dataArray[0])
Anche in questo caso l'array di id termina con null sul lato controller.
Qualcuno ha qualche suggerimento su come far passare correttamente l'array int al controller? Potrei dichiarare il parametro come String nell'azione Controller e serializzare manualmente e de-serializzare il parametro, ma ho bisogno di capire come ottenere il framework per fare automaticamente conversioni di tipo semplice.
Grazie!
Non è possibile aggirare il fatto che è necessario creare una stringa lunga aggirando l'array e aggiungendo ogni elemento alla stringa di query? –
Hai taggato che stai usando jQuery, quindi dovresti essere in grado di utilizzare '$ .param' http://api.jquery.com/jQuery.param/ per creare i valori codificati per te, ad es. 'window.location.replace ("/"+ controllerName +"/EditAll? "+ $ .param ({ids: dataArray, currentId: dataArray [0]}))' –