Передать массив из MVC в JavaScript? - PullRequest
49 голосов
/ 03 октября 2010

Я могу передать переменную из MVC ASP.NET с помощью этого:

var lastCategoryId = '<%=Model.CS.LastSelectedCategory %>';

Это нормально работает со строкой или целым числом, но как мне сделать с массивом строк? Я пытался передать массив таким же образом, но переменная установлена ​​в System.String []?

Ответы [ 9 ]

151 голосов
/ 20 августа 2012

Вы можете позволить .NET справиться со всеми сложностями для вас с помощью этой простой строки кода.

Предполагается, что вы используете синтаксис MVC Razor.

var yourJavaScriptArray = @Html.Raw(Json.Encode(Model.YourDotNetArray));

Для более новых версий MVC используйте:

var yourJavaScriptArray = @Html.Raw(Json.Serialize(Model.YourDotNetArray));

43 голосов
/ 04 октября 2010

Вы можете 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>
14 голосов
/ 03 октября 2010

Это должно сделать

var someArray=[<%foreach (var s in myStringArray){%>'<%=s%>',<%}%>];
3 голосов
/ 03 октября 2010

как то так:

<script type="text/javascript">
var myArr = [<%=string.Join(",", strArr.Select(o => "\"" + o + "\"")) %>];
</script>
2 голосов
/ 08 августа 2015

Так просто, так просто

<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"}, ...];
2 голосов
/ 15 апреля 2014

Один вкладыш:

var data = [@Html.Raw(String.Join(",", Model.MyArray.Select(i => "'" + i + "'")))];
2 голосов
/ 03 октября 2010

Вам необходимо отформатировать массив в синтаксис массива JavaScript.

var someArray = [<%= Model.SomeArray.Select(x => "'" + x +"'")
                           .Aggregate((x,y) => x + ", " + y);  %>];

Это будет заключать каждую запись в одинарные кавычки, а затем объединять их вместе с запятыми в квадратных скобках.: удалена лишняя скобка.

1 голос
/ 08 апреля 2017

Использование Json.NET

var yourlist = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.YourList))');
0 голосов
/ 17 апреля 2013

Просто хотел предоставить ответ, используя синтаксис 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 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...