我将一个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库),因为它很容易引入无效,恶意或其他意外输出.