Programing

Razor MVC 모델 배열로 자바 스크립트 배열 채우기

lottogame 2020. 9. 15. 19:12
반응형

Razor MVC 모델 배열로 자바 스크립트 배열 채우기


내 모델의 배열로 JavaScript 배열을로드하려고합니다. 이것이 가능해야 할 것 같습니다.

아래 방법 중 어느 것도 작동하지 않습니다.

JavaScript 루프를 만들고 JavaScript 변수가있는 모델 배열을 통해 증가 할 수 없습니다.

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

Razor 루프를 만들 수 없습니다. JavaScript가 범위를 벗어났습니다.

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

나는 그것을 작동시킬 수 있습니다.

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

하지만 왜 JSON을 사용해야하는지 모르겠습니다.

또한 현재로서는 이것을 255 바이트로 제한하고 있습니다. 앞으로는 많은 MB로 실행될 수 있습니다.


가능합니다. 면도기 컬렉션을 반복하면됩니다.

<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 # 배열과 자바 스크립트 배열의 동일한 상황을 가지고있었습니다. @ heymega 의이 솔루션은 내 자바 스크립트 파서가 루프 에서 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());

그리고 자바 스크립트 코드는

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

도움이되기를 바랍니다.


List<Alert>C #에서 토스트 (경고 메시지) 목록으로 작업 중이 었고 부분보기 ( .cshtml파일) 에서 Toastr의 JavaScript 배열로 필요했습니다 . 아래 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);
});

To expand on the top-voted answer, for reference, if the you want to add more complex items to the array:

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

etc.

Furthermore, if you want to pass the array as a parameter to your controller, you can stringify it first:

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


If it is a symmetrical (rectangular) array then Try pushing into a single dimension javascript array; use razor to determine the array structure; and then transform into a 2 dimensional array.

// 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);
}

This would be better approach as I have implemented :)

@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>

Hope this will help you to prevent you from iterating model ( happy coding )

참고URL : https://stackoverflow.com/questions/23781034/razor-mvc-populating-javascript-array-with-model-array

반응형