Domanda Passa la matrice da MVC a javascript?


Posso passare una variabile da MVC ASP.NET usando questo:

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

Funziona bene con stringa o intero ma come faccio con una serie di stringhe? Ho provato a passare la matrice allo stesso modo ma la variabile è impostata su System.String []?


47
2017-10-03 18:15


origine


risposte:


Questo dovrebbe fare

var someArray=[<%foreach (var s in myStringArray){%>'<%=s%>',<%}%>];

14
2017-10-03 18:26



Potresti consentire a .NET di gestire tutti i lavori pesanti per te con questa semplice linea di codice.

Questo presuppone che tu stia usando la sintassi del Rasoio MVC.

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

Per le versioni più recenti di MVC, utilizzare:

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


134
2017-08-20 14:21



Potresti serializzare JSON. In questo modo potrebbe passare anche valori più complessi e non preoccuparti di sfuggire a virgolette semplici, virgolette doppie, ecc:

var categoriesList = <%= new JavaScriptSerializer().Serialize(new[] { "value1", "value2" }) %>;

Scrivere un helper HTML per farlo sarebbe ancora meglio:

public static class HtmlExtensions
{
    public static string JsonSerialize(this HtmlHelper htmlHelper, object value)
    {
        return new JavaScriptSerializer().Serialize(value);
    }
}

e poi nella tua vista:

<script type="text/javascript">
    var categoriesList = <%= Html.JsonSerialize(new[] { "value1", "value2" }) %>;
</script>

43
2017-10-04 06:34



qualcosa come questo:

<script type="text/javascript">
var myArr = [<%=string.Join(",", strArr.Select(o => "\"" + o + "\"")) %>];
</script>

3
2017-10-03 18:26



È necessario formattare l'array in una sintassi di array JavaScript.

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

Ciò circonderà ogni voce con virgolette singole e poi le unirà insieme a virgole tra parentesi quadre.

Aggiornato: rimossa la parentesi aggiuntiva.


2
2017-10-03 18:24



Una fodera:

var data = [@Html.Raw(String.Join(",", Model.MyArray.Select(i => "'" + i + "'")))];

2
2018-04-15 17:56



Così facile, così semplice

<script type="text/javascript">
    var array = @Html.Raw(
        Json.Encode(
            (Model).Select(m=> new 
            { 
                id= m.ID, 
                name=m.Name
            })
        )
    );
</script>

L'output è:

[{"id":1,"name":"Name of 1"}, {"id":2,"name":"Name of 2"}, ...];

2
2017-08-08 13:20



Utilizzando Json.NET

var yourlist = JSON.parse('@Html.Raw(JsonConvert.SerializeObject(Model.YourList))');

1
2018-04-08 14:18