11
votes

Demande sérialisée.form à un dictionnaire ou quelque chose

Bonjour, j'ai besoin de passer ma demande.Form comme paramètre, mais je dois d'abord ajouter des couples de clé / valeur à celle-ci. Je reçois l'exception que la collection est réadonnée.

J'ai essayé: xxx

et je reçois la même erreur.

et j'ai essayé: xxx

à tester si je peux le transmettre un par un à un autre dictionnaire, mais je reçois:

System.InvalidcastException: spécifié La distribution n'est pas valide.

Un peu d'aide, n'importe qui? Merci


0 commentaires

4 Réponses :


22
votes

Vous n'avez pas besoin de lancer une chaîne à chaîne . namevaluecollection est construit autour des touches de chaîne et des valeurs de chaîne. Qu'en est-il d'une méthode d'extension rapide: xxx

de cette façon, vous pouvez facilement aller: xxx


2 commentaires

Thanx Matthew, je vais essayer demain. Je suis allé avec des champs cachés pour le moment.


Matthew - Nice One (et +1). Être un écossais, ne pouvait pas résister à mon poignot à ce sujet ci-dessous en utilisant un peu de linq :). Bonne année - PARF ... :-) (BTW, avoir un peu lu votre blog tout à l'heure actuelle, aimer les articles de Régula et JavaScript Linq) BTW, vous pouvez consulter cette implémentation de Linq JavaScript JSLINQ.CODEPLEX.COM



3
votes

Andre,

Du: P>

public static IDictionary<string, string> ToDictionary(this NameValueCollection col)
{
    IDictionary<string, string> myDictionary = new Dictionary<string, string>();
    if (col != null)
    {
        myDictionary =
            col.Cast<string>()
                .Select(s => new { Key = s, Value = col[s] })
                .ToDictionary(p => p.Key, p => p.Value);
    }
    return myDictionary;
}


2 commentaires

Hee Hee, Aye - :). Je fais parfois trop avec Linq. En fait, j'ai un dilema comme on m'a proposé une nouvelle opportunité qui doit être provisionnée sur la pile de lampes et je me demande comment je vais faire face aux objets PHP5 sans Linq :) (Tho j'ai vu cela phplinq.codeplex.com )


NomValuecollection doit être NameValuecollection



3
votes
public static Dictionary<string, string> ToDictionary(this NameValueCollection collection)
{
    return collection
      //.Keys
        .Cast<string>()
        .ToDictionary(key => key, key => collection[key]));
}

0 commentaires

16
votes

Si vous utilisez déjà MVC, vous pouvez le faire avec 0 lignes de code.

using System.Web.Mvc;

var dictionary = new Dictionary<string, object>();
Request.Form.CopyTo(dictionary);


0 commentaires