Razor MVC用Model array填充Javascript数组
Razor MVC Populating Javascript array with Model Array
我正试图用我的模型中的数组加载一个JavaScript数组。在我看来,这应该是可能的。
以下两种方法都不起作用。
无法通过带有JavaScript变量的Model Array创建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>
我正在处理一个toast(警报消息(列表,来自C#的List<Alert>
,需要它作为Toast的部分视图中的JavaScript数组(.cshtml
文件(。下面的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 });
我正在集成一个滑块,需要获取文件夹中的所有文件,并且从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));
希望它能帮助
这将是我实现的更好的方法:(
@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>
希望这将帮助您避免迭代模型(愉快编码(
如果它是对称(矩形(数组,则尝试推入一维javascript数组;用剃刀确定阵列结构;和然后变换为二维阵列。
// 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>
也许这个简单的解决方案也很有趣,它可以很容易地应用于javascript字典:
<script type="text/javascript">
var myArray = [
@foreach (var d in Model.data)
{
@:"@d",
}
];
</script>
翻译成这个(字符串1到字符串N在这里被认为是Model.data的内容(
<script type="text/javascript">
var myArray = [
"string1",
"string2",
"string3",
...
"stringN",
];
</script>
我需要创建一个JSON对象数组。以下方法奏效了。
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<_型号>_项目
- Laravel 5.2动态下拉选择不填充(javascript)
- 单击按钮时填充javascript变量
- 使用 PHP 填充 Javascript 饼图
- 用 MySql 数据填充 JavaScript 数组
- 从代码后面填充javascript库
- 如何填充javascript数组
- 如何用随机值预填充 JavaScript 数组
- 使用 Browserify / Webpack(ES6 或 CommonJS)填充 JavaScript 资产
- 如何从 html 表数据填充 javascript 模型
- 填充 JavaScript 数组的更好方法
- 使用 PHP/MySQL 填充 JavaScript 数组
- 禁用表单字段,直到上一个字段已填充 JavaScript
- Rails + charts.js:如何使用数据库中的值填充 Javascript 数组
- 为什么 Netbeans 导航器窗格不使用特定文件名填充 JavaScript 文件
- 如何动态填充javascript函数的选项
- 用 mysql 表数据填充 Javascript OptionArray
- 从模板引擎填充javascript数组
- 如何使用SQL查询中的数据填充Javascript动态树
- 用php函数的返回值填充JavaScript变量
- 编辑自动填充javascript的设置超时