将C#字符串数组转换为Javascript数组
本文关键字:数组 Javascript 转换 字符串 | 更新日期: 2023-09-27 18:01:12
我将一个C#字符串数组传递到一个使用TagBuilder构建Javascript的方法中。在我的Javascript中,我似乎无法获得数组中的实际项目:
public static IHtmlString NewsTicker(this HtmlHelper htmlHelper, string[] arrTickerContents)
{
TagBuilder script = new TagBuilder("script");
script.Attributes.Add("type", "text/javascript");
script.InnerHtml = @"
var rss_scr_contents = new Array();
$.each('" + arrTickerContents + @"', function (i, objValue) {
rss_scr_contents[i] = objValue;
});
return MvcHtmlString.Create(script.ToString());
}
这导致了以下源代码:
var rss_scr_contents = new Array();
$.each('System.String[]', function (i, objValue) {
rss_scr_contents[i] = objValue;
});
正确的语法是什么?
问题是arrTickerCountents.ToString()
没有返回预期的结果。
例如,(new [] {"hello", "world"}).ToString()
的求值结果为"System.String[]"
,这在这里没有用处。
处理这一问题的有效方法是使用一个转换,它可以从合适的.NET对象中发出有效的JavaScript值——最常见的工具可能是JSON转换器。我喜欢Json.NET,但它应该与其他转换器一起使用。
var jsonArray = JsonConvert.SerializeObject(arrTickerContents);
script.InnerHtml = @"
var rss_scr_contents = [];
$.each(" + jsonArray + @", function (i, objValue) {
rss_scr_contents[i] = objValue;
})
"; // Please make sure to post valid code
由于上面的循环不进行任何处理,请考虑更简单的替代方案。(我不喜欢使用具有全局窗口属性的var
。(
script.InnerHtml = @"rss_scr_contents = " + jsonArray + ";";
我推荐JSON,因为它简单并且可以自动转换,尽管它可能并不总是适用的。手动构建JavaScript值(即没有JSON库(应该小心,因为它很容易引入无效、恶意或其他意外输出。
与其手动推出自己的解决方案,我建议使用Newtonsoft.Json.这样的库
http://james.newtonking.com/pages/json-net.aspx
为什么要重新发明轮子?
我在Razor
中这样做,就像在NewtonSoft
中一样。
var jsonArray=Newtonsoft.Json.JsonConvert.SerializeObject(arrTickerContents);
var rss_scr_contents = @Html.Raw(jsonArray);
$.each('[' + string.Join(',', arrTickerContents), + ']', function (i, objValue) {