stocker un tableau de chaînes de caractères dans un HiddenField asp.net
J'ai besoin de stocker un tableau de chaîne de caractères dans une HiddenField dans mon formulaire avec asp.net. Quelqu'un peut-il me dire comment je peux réaliser cela? Grâce
OriginalL'auteur user1438482 | 2012-12-13
Vous devez vous connecter pour publier un commentaire.
Probablement quelques méthodes de travail.
1) Sérialiser le String[] en JSON
Ce serait assez facile .NET en utilisant les
JavaScriptSerializer
classe, et éviter les problèmes avec les caractères délimiteurs. Quelque chose comme:2) Venir avec un délimiteur qui n'apparaît jamais dans les cordes
Délimiter chaque chaîne de caractères avec un caractère comme
|||
qui n'apparaîtra jamais dans la chaîne. Vous pouvez utiliserString.Join()
pour construire cette chaîne. Quelque chose comme:Et ensuite de le reconstruire comme:
Ce qui pourrait être la meilleure option si vous pouvez faire confiance à votre entrée, comme une série de numéros de pré-définies choix. Sinon, vous auriez probablement souhaitez vérifier vos chaînes d'entrée pour s'assurer qu'ils ne contiennent pas de ce délimiteur si l'on voulait être très sûr. Vous pouvez éventuellement utiliser
HttpUtility.HtmlEncode()
pour échapper à chaque chaîne.Depuis le HiddenField ne peut contenir que des données de chaîne qui est du type de la Matrice. Pour stocker le Tableau, nous avons besoin de Sérialiser le Tableau de chaîne de caractères. La voie à sérialiser le Tableau, il dépend du scénario.
Je pense que la réponse serait mieux si vous montrent comment la valeur est stockée dans le champ caché. Aussi, comme moi, je pense que tout le monde à la recherche de cette réponse voudrais voir le chemin inverse:
new JavaScriptSerializer().Deserialize<List<string>>(str)
. De toute façon, merci à vous 🙂 ...JavaScriptSerializer
résolu mon problème +1OriginalL'auteur Mike Christensen
Pour stocker le tableau
Pour obtenir le tableau
myarray
en fait contient une virgule.C'est vrai. Face à cette question avant. Dû changer pour un autre personnage qui n'apparaît pas dans la chaîne qui n'est pas garanti
OriginalL'auteur codingbiz
Avez-vous réellement envie de le stocker dans un seul champ?
Si vous placez chaque valeur dans son propre champ caché, et donner à tous les champs cachés le nom de votre propriété, puis le modèle de liaison permettra de traiter cela comme un tableau.
OriginalL'auteur David
Les Réponses Existantes
J'ai toujours plutôt utiliser la valeur par défaut de la propriété et le modèle de classeur que d'avoir à envelopper un tableau dans un fichier CSV et d'avoir à vous soucier de le diviser et de se joindre à elle à chaque aller-retour vers le client (dans les réponses par @Mike Christensen et @codingbiz). C'est exactement ce que le modèle de liaison est-il pour les.
@David réponse nous oriente dans la bonne direction, mais je préfère ne pas inline ce type de logique dans votre point de vue et de le reléguer à un EditorTemplate à la place.
Solution Préférée
De sorte que vous pouvez ajouter le point de vue suivant
~/Views/Shared/EditorTemplates/HiddenArray.cshtml
Ensuite appeler comme cela à partir de votre modèle:
Stratégies Alternatives
Voici comment je suis arrivé à spécifier manuellement le nom et l'id de la variable pour chaque caché entrée:
HiddenFor()
l'intérieur d'une boucle, car il pense que le nom de la propriété comprend maintenant la valeurCachés()
nous allons effectivement le double et le nom de la propriété de ne pas être capable de se lier sur le chemin du retour.Pour En Savoir Plus:
OriginalL'auteur KyleMit