Razor MVC, заполняющий массив Javascript модельным массивом



Я пытаюсь загрузить массив JavaScript с массивом из моей модели. Мне кажется, что это должно быть возможно.



ни один из приведенных ниже способов не работает.



не удается создать цикл JavaScript и увеличить через массив модели с переменной JavaScript



        for(var j=0; j<255; j++)
{
jsArray = (@(Model.data[j])));
}


не удается создать цикл бритвы, JavaScript выходит за рамки



        @foreach(var d in Model.data)
{
jsArray = d;
}


Я могу заставить его работать с



        var jsdata = @Html.Raw(Json.Encode(Model.data)); 


но я не знаю, почему я должен использовать JSON.



также в то время как на данный момент я ограничиваю это до 255 байт. В будущем он может столкнуться со многими MBs.

550   7  

7 ответов:

это возможно, Вам просто нужно пройти через коллекцию бритвы

<script type="text/javascript">

    var myArray = [];

    @foreach (var d in Model.data)
    {
        @:myArray.push("@d");
    }

    alert(myArray);

</script>

надеюсь, что это помогает

синтаксис JSON это в значительной степени синтаксис JavaScript для кодирования вашего объекта. Поэтому, с точки зрения краткости и скорости, ваш собственный ответ является лучшим выбором.

Я использую этот подход, когда заполнение выпадающих списков в моей модели KnockoutJS. Е. Г.

var desktopGrpViewModel = {
    availableComputeOfferings: ko.observableArray(@Html.Raw(JsonConvert.SerializeObject(ViewBag.ComputeOfferings))),
    desktopGrpComputeOfferingSelected: ko.observable(),
};
ko.applyBindings(desktopGrpViewModel);

...

<select name="ComputeOffering" class="form-control valid" id="ComputeOffering" data-val="true" 
data-bind="options: availableComputeOffering,
           optionsText: 'Name',
           optionsValue: 'Id',
           value: desktopGrpComputeOfferingSelect,
           optionsCaption: 'Choose...'">
</select>

обратите внимание, что я использую Json.NET пакет NuGet для сериализации и ViewBag для передачи данных.

я интегрировал слайдер и должен был получить все файлы в папке и имел такую же ситуацию с массивом C# для массива javascript.Это решение от @heymega работало отлично, за исключением того, что мой парсер javascript был раздражен на var используют foreach петли. Поэтому я немного поработал, избегая петли.

var allowedExtensions = new string[] { ".jpg", ".jpeg", ".bmp", ".png", ".gif" };

var bannerImages = string.Join(",", Directory.GetFiles(Path.Combine(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath, "Images", "banners"), "*.*", SearchOption.TopDirectoryOnly)
    .Where(d => allowedExtensions.Contains(Path.GetExtension(d).ToLower()))
    .Select(d => string.Format("'{0}'", Path.GetFileName(d)))
    .ToArray());

и код javascript-это

var imagesArray = new Array(@Html.Raw(bannerImages));

надеюсь, что это помогает

Я работал со списком тостов (предупреждающих сообщений), List<Alert> из C# и нужен он как массив JavaScript для Toastr в частичном виде (). Код JavaScript ниже-это то, что сработало для меня:

var toasts = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(alerts));
toasts.forEach(function (entry) {
    var command = entry.AlertStyle;
    var message = entry.Message;
    if (command === "danger") { command = "error"; }
    toastr[command](message);
});

чтобы развернуть ответ с голосованием сверху, Для справки, если вы хотите добавить более сложные элементы в массив:

@:myArray.push(ClassMember1: "@d.ClassMember1", ClassMember2: "@d.ClassMember2");

etc.

кроме того, если вы хотите передать массив в качестве параметра контроллеру, вы можете сначала его stringify:

myArray = JSON.stringify({ 'myArray': myArray });

если это симметричный (прямоугольный) массив, то Попробуйте нажать в одном измерении javascript массив; используйте razor для определения структуры массива; и затем преобразовать в 2-мерный массив.

// this just sticks them all in a one dimension array of rows * cols
var myArray = new Array();
@foreach (var d in Model.ResultArray)
{
    @:myArray.push("@d");
}

var MyA = new Array();

var rows = @Model.ResultArray.GetLength(0);
var cols = @Model.ResultArray.GetLength(1);

// now convert the single dimension array to 2 dimensions
var NewRow;
var myArrayPointer = 0;

for (rr = 0; rr < rows; rr++)
{
  NewRow = new Array();
  for ( cc = 0; cc < cols; cc++)
  {
    NewRow.push(myArray[myArrayPointer]);
    myArrayPointer++;
  }
  MyA.push(NewRow);
}

Это было бы лучше подход, как я реализовал :)

@model ObjectUser
@using System.Web.Script.Serialization
@{ 
    var javaScriptSearilizer = new JavaScriptSerializer();
    var searializedObject = javaScriptSearilizer.Serialize(Model);
 }

<script>
    var searializedObject = @Html.Raw(searializedObject )
    console.log(searializedObject);
    alert(searializedObject);
</script>

надеюсь, что это поможет вам предотвратить повторение модели (счастливое кодирование)

Comments

    Ничего не найдено.