2009-02-16 4 views
4

Dans Silverlight 2, en utilisant C# sur ASP.NET, on peut passer d'un ensemble de paramètres d'initialisation en affectant les InitiParams de l'objet Silverlight avec une chaîne qui est une série de séparées par des virgules paires clé/valeur.Silverlight initParams où la valeur a une virgule

J'ai vu d'autres systèmes qui ont un mécanisme similaire pour passer autour des collections de paires clé/valeur en une seule chaîne.

Quelle est la solution pour spécifier une valeur qui a une virgule en elle?

Par exemple, cette chaîne ne pose pas de problème:

string s1 = "key1=value1,key2=value2"; 

mais celui-ci fait:

string s2 = "key1=value1,key2=two,values"; 

-à-dire les « deux valeurs » doit avoir la virgule échappé en quelque sorte ...

Répondre

4

Malheureusement, après une recherche sur Google rapide, je ne pense pas que le mécanisme d'analyse syntaxique pour initParams suit toute sorte de schéma de codage. Il serait en fait préférable qu'il s'agisse d'un fragment de chaîne de requête d'URL, qui a un codage et des règles assez standard et qui est compatible avec les virgules.

Je pense donc que votre seule option est d'utiliser un délimiteur différent, comme le symbole de tuyau |.

Par exemple:

key1=value1,key2=two|values 

Si cela devait être une virgule dans la valeur pour une raison quelconque, vous pouvez toujours faire String.Replace ...

1

J'ai eu le même problème et l'encodage d'URL utilisé pour mes InitParams. J'utilise une section silverlightInitParams dans le fichier web.config pour charger plusieurs paramètres à la fois et générer la chaîne initParams comme ceci:

var initParams = new StringBuilder(); 
var initParamsFromConfig = (NameValueCollection)ConfigurationManager.GetSection("silverlightInitParams"); 
foreach (string key in initParamsFromConfig) 
{ 
    initParams.AppendFormat("{0}={1},", key, Server.UrlEncode(initParamsFromConfig[key])); 
} 

Dans le client Silverlight au sein de Application_Startup j'extraire les paramètres et les stocker dans un dictionnaire:

foreach (var initParam in e.InitParams) 
{ 
    InitParameters.Add(initParam.Key, HttpUtility.UrlDecode(initParam.Value)); 
}