Ответ 1
Это должно сделать
var someArray=[<%foreach (var s in myStringArray){%>'<%=s%>',<%}%>];
Я могу передать переменную из MVC ASP.NET, используя это:
var lastCategoryId = '<%=Model.CS.LastSelectedCategory %>';
Это отлично работает со строкой или целым числом, но как мне это сделать с массивом строк? Я попытался передать массив таким же образом, но переменная установлена в System.String []?
Это должно сделать
var someArray=[<%foreach (var s in myStringArray){%>'<%=s%>',<%}%>];
Вы можете позволить .NET обрабатывать весь тяжелый подъем для вас с помощью этой простой строки кода.
Предполагается, что вы используете синтаксис MVC Razor.
var yourJavaScriptArray = @Html.Raw(Json.Encode(Model.YourDotNetArray));
Для более новых версий MVC используйте:
var yourJavaScriptArray = @Html.Raw(Json.Serialize(Model.YourDotNetArray));
Вы можете JSON сериализовать его. Этот способ мог бы пройти еще более сложные значения и не беспокоиться об исключении простых котировок, двойных кавычек и т.д.:
var categoriesList = <%= new JavaScriptSerializer().Serialize(new[] { "value1", "value2" }) %>;
Написание HTML-помощника для этого было бы еще лучше:
public static class HtmlExtensions
{
public static string JsonSerialize(this HtmlHelper htmlHelper, object value)
{
return new JavaScriptSerializer().Serialize(value);
}
}
а затем, на ваш взгляд:
<script type="text/javascript">
var categoriesList = <%= Html.JsonSerialize(new[] { "value1", "value2" }) %>;
</script>
что-то вроде этого:
<script type="text/javascript">
var myArr = [<%=string.Join(",", strArr.Select(o => "\"" + o + "\"")) %>];
</script>
Вам нужно отформатировать массив в синтаксисе массива JavaScript.
var someArray = [<%= Model.SomeArray.Select(x => "'" + x +"'")
.Aggregate((x,y) => x + ", " + y); %>];
Это будет охватывать каждую запись одинарными кавычками, а затем присоединяться к ним вместе с запятыми между квадратными скобками.
Обновлено: удалены дополнительные скобки.
Один вкладыш:
var data = [@Html.Raw(String.Join(",", Model.MyArray.Select(i => "'" + i + "'")))];
Так просто, так просто
<script type="text/javascript">
var array = @Html.Raw(
Json.Encode(
(Model).Select(m=> new
{
id= m.ID,
name=m.Name
})
)
);
</script>
Выход:
[{"id":1,"name":"Name of 1"}, {"id":2,"name":"Name of 2"}, ...];
Использование Json.NET
var yourlist = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.YourList))');
Просто хотел предоставить ответ, используя синтаксис Razor:
У нас есть Dictionary<int, int>
, который мы представляем для jQuery Sparkline в виде "массива массивов".
var usageData = [ @string.Join(",", Model.UsageData.Select(d => string.Format("[{0},{1}]", d.Key, d.Value)).ToArray()) ];
Используется так:
$('#sparkline').UsageSparkline(usageData, { tooltipFormatter: cachedTooltips });
Это то, что мы получаем при просмотре источника:
var usageData = [ [-13,0],[-12,1],[-11,0],[-10,0],[-9,1],[-8,1],[-7,0],[-6,2],[-5,2],[-4,0],[-3,0],[-2,9],[-1,3],[0,4] ];
$('#sparkline').UsageSparkline(usageData, { tooltipFormatter: cachedTooltips });