Dans une vue de liste fortement typée, j'essaie de transmettre les données actuelles (en tant que liste du modèle) à mon contrôleur via Ajax, pour qu'il puisse faire quelque chose avec ça.MVC/AJAX - envoi de la collection du modèle au contrôleur
Le problème auquel je suis confronté est que je n'arrive pas à transmettre la liste de données dans la vue actuelle à mon contrôleur. L'utilisation de la méthode AJAX sans paramètre fonctionne (mais j'ai besoin d'utiliser le paramètre, ou s'il y a un autre moyen de fournir ces informations à mon contrôleur?).
J'ai également essayé de faire une liste (test) lorsque la vue est en cours de construction, puis d'utiliser cette variable comme paramètre mais apparemment après construction la variable est vide?
vue Index
@model IEnumerable<databaseModel.cbms>
@{
ViewBag.Title = "Cbms Home";
List<databaseModel.cbms> test = Model.ToList();
}
@Ajax.ActionLink("productId", "AJX_SortByProductId", new { cbmsModel = test }, new AjaxOptions()
{
HttpMethod = "GET",
UpdateTargetId = "divCbms",
InsertionMode = InsertionMode.Replace
})
Contrôleur
public PartialViewResult AJX_SortByProductId(List<cbms> cbmsModel)
{
//Retrieves the data
List<cbms> model = cbms.SortByProductId();
//Returns the partial view
return PartialView("_Cbms", model);
}
Alors, quand je rentre dans le contrôleur, la liste cbmsModel est vide et je ne peux pas l'utiliser comme un paramètre. Je peux transmettre une chaîne sans problème, mais je veux une liste des données du modèle actuel sur ma vue.
EDIT:
Ce qui suit ne fonctionne pas non plus:
Modèle
@model IEnumerable<databaseModel.cbms>
@{
ViewBag.Title = "Cbms Home";
List<databaseModel.cbms> test = Model.ToList();
List<databaseModel.cbms> cbmsModel = new List<databaseModel.cbms>();
int i = 0;
foreach (databaseModel.cbms value in test)
{
i++;
TempData.Add(i.ToString(), value);
}
}
@Ajax.ActionLink("productId", "AJX_SortByProductId", new { cbmsModel = TempData.Values.ToList() }, new AjaxOptions()
{
HttpMethod = "GET",
UpdateTargetId = "divCbms",
InsertionMode = InsertionMode.Replace
})
Il en résulte encore dans le paramètre étant vide. Je ne comprends pas pourquoi ...
Soit stocker la liste dans la ViewBag et de l'utiliser à l'intérieur du contrôleur ou stringify vos données sur la vue avant l'envoyer sur le serveur. –
J'ai essayé de le stocker dans le Viewbag (par exemple Viewbag.Temp, ViewBag.Temp = test OU ViewBag.Temp = Model.ToList();), mais le Viewbag.Temp est également vide quand je le passe dans ma méthode Ajax. – DaGrooveNL
Après un long débogage, j'ai découvert que cbmsModel se débarrasse de l'affichage de la vue, y compris toutes les autres variables sauf TempData. Maintenant, la question est, comment puis-je utiliser TempData pour transmettre la variable? Depuis l'utilisation @ Ajax.ActionLink ("ProductID", "AJX_SortByProductId", nouvelles {cbmsModel = TempData.Values.ToList()}, nouveaux AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "divCbms", InsertionMode = InsertionMode.Replace }) ne fonctionne pas. – DaGrooveNL