Estou tentando carregar um array JavaScript com um array do meu modelo. Parece-me que isso deveria ser possível.
Nenhuma das maneiras abaixo funciona.
Não é possível criar um loop JavaScript e incrementar por meio de matriz de modelo com variável JavaScript
for(var j=0; j<255; j++)
{
jsArray = (@(Model.data[j])));
}
Não é possível criar um loop Razor, JavaScript está fora do escopo
@foreach(var d in Model.data)
{
jsArray = d;
}
Eu posso fazer funcionar com
var jsdata = @Html.Raw(Json.Encode(Model.data));
Mas não sei por que deveria usar JSON.
Além disso, no momento estou restringindo isso a 255 bytes. No futuro, ele pode rodar em muitos MBs.
javascript
arrays
asp.net-mvc
asp.net-mvc-4
razor
Tom Martin
fonte
fonte
Respostas:
Isso é possível, você só precisa percorrer a coleção de navalhas
Espero que isto ajude
fonte
@d
é declarado dentro do loop foreach. Observe que o d tem o termo VAR na frente. Isso permite que ele seja usado dentro do loop foreachA sintaxe JSON é basicamente a sintaxe JavaScript para codificar seu objeto . Portanto, em termos de concisão e rapidez, sua própria resposta é a melhor aposta.
Eu uso essa abordagem ao preencher listas suspensas em meu modelo KnockoutJS . Por exemplo
...
Observe que estou usando o pacote Json.NET NuGet para serialização e o ViewBag para passar dados.
fonte
Estava trabalhando com uma lista de toasts (mensagens de alerta),
List<Alert>
em C # e precisava dela como array JavaScript para Toastr em uma visão parcial (.cshtml
arquivo). O código JavaScript abaixo é o que funcionou para mim:fonte
Eu estava integrando um controle deslizante e precisava obter todos os arquivos da pasta e estava tendo a mesma situação de array C # para array javascript. Esta solução de @heymega funcionou perfeitamente, exceto que meu analisador de javascript estava incomodado com o
var
uso emforeach
loop. Então, resolvi evitar o loop.E o código javascript é
Espero que ajude
fonte
Para expandir a resposta mais votada, para referência, se você deseja adicionar itens mais complexos à matriz:
@:myArray.push(ClassMember1: "@d.ClassMember1", ClassMember2: "@d.ClassMember2");
etc.
Além disso, se você deseja passar o array como um parâmetro para o seu controlador, você pode restringi-lo primeiro:
myArray = JSON.stringify({ 'myArray': myArray });
fonte
@:myArray.push(ClassMember1: "@d.ClassMember1", ClassMember2: "@d.ClassMember2");
Essa seria a melhor abordagem conforme implementei :)
Espero que isso ajude você a evitar a iteração do modelo (feliz programação)
fonte
Se for uma matriz simétrica (retangular), tente empurrar para uma matriz javascript de dimensão única; use o razor para determinar a estrutura do array; e então se transformar em uma matriz bidimensional.
fonte