Je n'arrive pas à comprendre comment passer un tableau de GUID en tant que paramètre à un contrôleur ASP.NET MVC via POST. Qu'est-ce que je rate? Existe-t-il un moyen plus simple de faire cela?Liaison de paramètre ASP.NET MVC: comment POST une liste ou un tableau vers une méthode de contrôleur?
Dans mon AngularJS balisage:
<form method="post" action="/Foo/Bar" >
<input name="itemIds" type="hidden" value="{{ ctrl.itemIds }}">
<button type="submit">Submit</button>
</form>
Quels sont les résultats en HTML:
<form method="post" action="/Foo/Bar" >
<input name="itemIds" type="hidden" value="["8cd52539-c371-402a-b8be-12775f03ab68","8c97f9e0-666c-41ba-a914-72815745d1f0"]">
<button type="submit">Submit</button>
</form>
Dans mon FooController:
[System.Web.Mvc.HttpPost]
public ActionResult Bar([FromBody]Guid[] itemIds) => ...
Quand je déboguer ci-dessus, mon HTTP POST semble être correct mais je reçois null itemIds
en Bar
. Pouvez-vous m'aider à changer cela pour travailler? Existe-t-il un meilleur moyen de remplir mon corps de requête, étant donné que j'ai déjà un tableau de GUID dans mon modèle JS?
Je crois que le 'Guid' se présenterait comme une' chaîne', alors vous lanceriez un 'Guid'. Pour une raison étrange, il ne lance généralement pas le type en toute sécurité lorsque vous utilisez les paramètres MVC par défaut comme vous avez ci-dessus. – Greg
Cela me rend triste. Changer le paramètre en une chaîne à la place de Guid [] donne une chaîne unique avec des barres obliques inverses, des crochets et des virgules, ce qui est encore pire. Des idées d'une manière plus élégante - au moins une où je peux obtenir un tableau de chaînes ou une liste plutôt qu'une seule chaîne? –
Vous pouvez créer un objet Json de base, puis le transmettre. Avec un seul désérialiser, pour éviter une partie de l'encodage fou.'{Id = ''}' type d'objet, un objet de base avec une propriété Id. Évidemment valide Json aiderait. – Greg