Próbuję przekazać tablicę int z JavaScript do kontrolera MVC, który akceptuje 2 parametry - tablicę int i int. Ma to na celu przekierowanie strony do widoku zwrócone przez działanie kontrolera.Przekazywanie tablicy int do kontrolera MVC
var dataArray = getAllIds(); //passes back a JavaScript array
window.location.replace("/" + controllerName + "/EditAll?ids=" + dataArray + "¤tID=" + dataArray[0])
dataArray zawiera 1,7 zgodnie z oczekiwaniami dla mojego użycia próbki.
kod kontrolera
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);
}
Kwestia jest taka, że podczas inspekcji int [] identyfikatory przekazywane do sterownika, to wartość jest null. currentID jest ustawiony na 1 zgodnie z oczekiwaniami.
Próbowałem już ustawić jQuery.ajaxSettings.traditional = true, który nie ma żadnego efektu Próbowałem również utworzyć adres URL strony serwera przy użyciu @ Url.Action w JavaScript. Próbowałem również JSON.Stringify przed przekazaniem tablicy np.
window.location.replace("/" + controllerName + "/EditAll?ids=" + JSON.stringify(dataArray) + "¤tID=" + dataArray[0])
Znów tablica id kończy się wartością zerową po stronie sterownika.
Czy ktoś ma jakieś wskazówki dotyczące prawidłowego przekazania tablicy int do kontrolera? Mogłabym zadeklarować parametr jako String w akcji kontrolera i ręcznie serializować i dekompilować parametr, ale muszę zrozumieć, jak uzyskać strukturę do automatycznego przeprowadzania prostych konwersji typów.
Dzięki!
Czy nie ma potrzeby ominięcia faktu, że trzeba utworzyć długi łańcuch, wykonując pętlę wokół tablicy i dodając każdy element do ciągu zapytania? –
Oznaczyłeś, że używasz jQuery, więc powinieneś móc użyć '$ .param' http://api.jquery.com/jQuery.param/ do zbudowania zakodowanych wartości np. 'window.location.replace ("/"+ controllerName +"/EditAll? "+ $ .param ({ids: dataArray, currentId: dataArray [0]}))' –