在Silverlight 2中,在ASP.NET上使用C#,您可以通过为Silverlight对象的InitiParams分配一串逗号分隔的键/值对来传递一组初始化参数。
我见过其他系统具有类似的机制,可以将键/值对的集合作为单个字符串传递。
指定包含逗号的值的解决方案是什么?
例如,此字符串没有问题:
string s1 = "key1=value1,key2=value2";
但是这个确实:
string s2 = "key1=value1,key2=two,values";
即。 “两个,价值观”需要以某种方式逃脱逗号......
答案 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));
}