রেজার এমভিসি মডেল অ্যারে সহ জাভাস্ক্রিপ্ট অ্যারে পপুলেটিং করছে


102

আমি আমার মডেল থেকে একটি অ্যারে দিয়ে একটি জাভাস্ক্রিপ্ট অ্যারে লোড করার চেষ্টা করছি। আমার কাছে মনে হচ্ছে এটি সম্ভব হওয়া উচিত।

নীচের কোনটিই কাজ করে না।

জাভাস্ক্রিপ্ট ভেরিয়েবল সহ মডেল অ্যারের মাধ্যমে একটি জাভাস্ক্রিপ্ট লুপ এবং ইনক্রিমেন্ট তৈরি করতে পারে না

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

একটি রেজার লুপ তৈরি করা যায় না, জাভাস্ক্রিপ্টের সুযোগ নেই

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

আমি এটি নিয়ে কাজ করতে পারি

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

তবে কেন জেএসএন ব্যবহার করতে হবে তা আমি জানি না।

এছাড়াও এই মুহুর্তে আমি এটি 255 বাইটে সীমাবদ্ধ করছি। ভবিষ্যতে এটি অনেক এমবিতে চলতে পারে।


4
আপনি জেএসে রেজারটি অ্যাক্সেস করতে পারবেন তবে বিপরীতে নয়
এহসান সাজ্জাদ

উত্তর:


219

এটি সম্ভব, আপনাকে কেবল রেজার সংগ্রহের মধ্য দিয়ে লুপ করতে হবে

<script type="text/javascript">

    var myArray = [];

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

    alert(myArray);

</script>

আশাকরি এটা সাহায্য করবে


নীচে স্বরলিপিটি আমার মাই অ্যারে = নতুন অ্যারে () ব্যবহার করে আমার অ্যারে ঘোষণা করতে হয়েছিল;
টম মার্টিন

এগুলি কাজ করে - হ্যাঁ তা না হলে এটি myArray নামক একটি সি # অবজেক্টের সন্ধান করবে।
হেইমেগা

4
বড় সাহায্য। আমি ভেবেছিলাম একটি মডেল অভিধান থেকে জাভাস্ক্রিপ্ট অবজেক্ট তৈরি করতে আমার বেশ বিশাল সমস্যা হবে।
আইএবস্ট্রাক্ট

ধন্যবাদ! আমি এটির প্রয়োজনে ছিলাম, কারণ আমাকে জাভাস্ক্রিপ্টে স্ট্রিংগুলির একটি তালিকা এবং তারপরে আমার কৌণিক অ্যাপের জন্য টাইপস্ক্রিপ্টে পাস করতে হয়েছিল :)
ব্লুজাইট

@ মিমক্রাই, ফোরচ @dলুপের ভিতরে ঘোষণা করা হয়েছে। লক্ষ্য করুন d এর সামনে VAR শব্দটি রয়েছে। এটি এটিকে
ফোরচ

8

তাদেরকে JSON সিনট্যাক্স প্রায় কাছাকাছি আপনার বস্তুর কোডিং জন্য JavaScript সিনট্যাক্স হয় । অতএব, সংক্ষিপ্ততা এবং গতির ক্ষেত্রে, আপনার নিজের উত্তরটি সেরা বেট।

আমার নকআউটজেএস মডেলটিতে ড্রপডাউন তালিকাগুলি স্থাপন করার সময় আমি এই পদ্ধতির ব্যবহার করি । যেমন

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 নিউগেট প্যাকেজ এবং ডেটা পাস করার জন্য ভিউব্যাগ ব্যবহার করছি ।


8

আমি List<Alert>সি # থেকে টোস্টের (সতর্কতা বার্তাগুলির) একটি তালিকা নিয়ে কাজ করছিলাম এবং এটি আংশিক দৃশ্যে ( .cshtmlফাইল) টোস্টারের জাভাস্ক্রিপ্ট অ্যারে হিসাবে প্রয়োজন । নীচে জাভাস্ক্রিপ্ট কোডটি আমার পক্ষে কাজ করেছে:

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

5

রেফারেন্সের জন্য শীর্ষ-ভোট দেওয়া উত্তরে প্রসারিত করতে যদি আপনি অ্যারেতে আরও জটিল আইটেম যুক্ত করতে চান:

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

ইত্যাদি

তদতিরিক্ত, আপনি যদি আপনার নিয়ামকের কাছে প্যারামিটার হিসাবে অ্যারেটি পাস করতে চান তবে আপনি প্রথমে এটি স্ট্রিংফাই করতে পারেন:

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


আপনার কোড নিয়ে একটি সমস্যা আছে। এটি হওয়া উচিত @:myArray.push(ClassMember1: "@d.ClassMember1", ClassMember2: "@d.ClassMember2");
আসাদ

4

আমি একটি স্লাইডারকে একীভূত করছিলাম এবং ফোল্ডারে সমস্ত ফাইল আনার দরকার ছিল এবং জাভাস্ক্রিপ্ট অ্যারেতে সি # অ্যারের একই পরিস্থিতি ছিল @ @ জায়েজ স্ক্রিপ্ট পার্সার বাদে এই সমাধানটি পুরোপুরি কাজ করেছিল লুপটিতে 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));

আশা করি এটা সাহায্য করবে


1

আমি কার্যকর হিসাবে এটি আরও ভাল পদ্ধতির হতে হবে :)

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

আশা করি এটি আপনাকে পুনরাবৃত্তি মডেল থেকে বিরত রাখতে সহায়তা করবে (শুভ কোডিং)


0

যদি এটি একটি প্রতিসম (আয়তক্ষেত্রাকার) অ্যারে হয় তবে একক মাত্রা জাভাস্ক্রিপ্ট অ্যারেতে ঠেলে চেষ্টা করুন; অ্যারের কাঠামো নির্ধারণ করতে রেজার ব্যবহার করুন; এবং তারপরে একটি 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);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.