Silverlight InitParams,其中值为逗号

时间:2009-02-16 23:25:25

标签: c# asp.net silverlight-2.0

在Silverlight 2中,在ASP.NET上使用C#,您可以通过为Silverlight对象的InitiParams分配一串逗号分隔的键/值对来传递一组初始化参数。

我见过其他系统具有类似的机制,可以将键/值对的集合作为单个字符串传递。

指定包含逗号的值的解决方案是什么?

例如,此字符串没有问题:

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

但是这个确实:

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

即。 “两个,价值观”需要以某种方式逃脱逗号......

2 个答案:

答案 0 :(得分:4)

不幸的是,经过快速谷歌搜索后,我不认为InitParams的解析机制遵循任何种类的编码方案。如果它是一个URL查询字符串片段,它实际上会更好,它具有相当标准的编码和规则,并且是逗号友好的。

所以我认为您唯一的选择是使用不同的分隔符,例如管道符号|。

E.g:

key1=value1,key2=two|values

如果由于某种原因必须在值中使用逗号,则可以始终执行String.Replace ...

答案 1 :(得分:1)

我遇到了同样的问题,并为我的InitParams使用了URL编码。我在web.config文件中使用了一段silverlightInitParams来一次加载几个参数并生成initParams字符串,如下所示:

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

在Application_Startup中的Silverlight客户端中,我提取参数并将它们存储在字典中:

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