我正在尝试使用模型中的数组加载 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。
这是可能的,你只需要循环遍历razor集合即可
<script type="text/javascript">
var myArray = [];
@foreach (var d in Model.data)
{
@:myArray.push("@d");
}
alert(myArray);
</script>
我正在处理 Toast 列表(警报消息),来自 C# 的
List<Alert>
,需要将其作为部分视图(.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);
});
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 来传递数据。
@:myArray.push(ClassMember1: "@d.ClassMember1", ClassMember2: "@d.ClassMember2");
此外,如果您想将数组作为参数传递给控制器,您可以先将其字符串化:
myArray = JSON.stringify({ 'myArray': myArray });
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));
希望有帮助
@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>
希望这能帮助您防止迭代模型(快乐编码)
// 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);
}
var array = [];
@foreach (var item in model.List)
{
@:array.push({
"Project": "@item.Project",
"ProjectOrgUnit": "@item.ProjectOrgUnit"
});
}
@functions
{
string GetStringArray()
{
var stringArray = "[";
for (int i = 0; i < Model.List.Count; i++)
{
if (i != Model.List.Count - 1)
{
stringArray += $"'{Model.List[i]}', ";
}
else
{
stringArray += $"'{Model.List[i]}']";
}
}
return stringArray;
}
}
<script>
var list = @Html.Raw(GetStringArray());
</script>
<script type="text/javascript">
var myArray = [
@foreach (var d in Model.data)
{
@:"@d",
}
];
</script>
翻译成这样(这里将 string1 到 stringN 视为 Model.data 的内容)
<script type="text/javascript">
var myArray = [
"string1",
"string2",
"string3",
...
"stringN",
];
</script>
const data=
[
@foreach (var item in Model.Data)
{
@:{ items: { scores: @item.Score, link: @item.Id, color: '#58C1EE', borderColor: 'black' } },
}
];
<script>
var tempArray = [];
@foreach (var item in Model.Collection)
{
@:tempArray.push({ Field1: "@item.Field1", Field2: "@item.Field2" });
}
$("#btn").on("click", function () {
$.ajax({
url: '/controller/action',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(tempArray),
success: function (resp) {
alert(resp);
}
});
});
</script>
控制器/动作
参数: ICollection _items<_Model>