将MVC .NET Razor与Javascript结合起来构建一个数组
我将一个List从我的控制器传递给一个视图,我希望能够通过JQuery/Javascript中的结果来获取模型和循环。我有一段时间搞清楚如何做到这一点。将MVC .NET Razor与Javascript结合起来构建一个数组
我的控制器返回一个颜色列表。在视图中,我将列表转换为数组。然后我把它传递给我想要通过它来构建一个我可以在JS中使用的数组。
<script>
$(document).ready(function() {
var currentView = sessionStorage.getItem('lastView');
var jsArr;
for (i=0; i<@arr.Length; i++) {
jsArr.push(@arr[i])
}
if (!currentView) {
sessionStorage.setItem('lastView', 0);
$("body").css("background-image", "url('/Images/Home/@arr[0].Location')");
} else {
sessionStorage.setItem('lastView', currentView++);
}
})
</script>
必须有这样做的一个简单的方法...
我反而从服务器返回JSON。但是,如果你想这样做在HTML视图我认为像这可能工作:
var jsonObj = '@Html.Raw(Json.Encode(Model.arr))'
//the loop is unnecessary, but can be useful if you need additional processing
var myArray = [];
for (i=0; i<jsonObj.length; i++) {
myArray.push(jsonObj[i])
}
<script>
$(document).ready(function() {
var currentView = sessionStorage.getItem('lastView');
var jsArr = @Html.Raw(Json.Encode(arr)) ;
if (!currentView) {
sessionStorage.setItem('lastView', 0);
$("body").css("background-image", "url('/Images/Home/@Html.Raw(arr[0].Location)')");
} else {
sessionStorage.setItem('lastView', currentView++);
}
})
</script>
谢谢tvanfosson。我肯定错过了什么。你的代码也不行。在
这只是一个解析错误。创建一个名为identity的函数:'function identity(val){return val; }'和do:'var jsArr = identity(@ Html.Raw(Json.Encode(arr)));'如果你想摆脱语法错误。 – 2014-10-31 03:12:15
至于TGH的回答,引用缺乏剃刀代码 - 'var jsArr ='@ Html.Raw(Json.Encode(arr))';' – 2014-10-31 03:17:41
这里是手工创建一个JSON或JS对象剃刀代码的方式,一些非常好用代码:
@foreach (var item in Model.Users)
{
<text>
UserData[UserData.length] = {
"UserID": '@item.ID', "FullName": '@item.Name'
};
</text>
}
我故意显示正在使用的模型属性名称和JSON属性名称不同,以显示手动构建数组的优点。
此外,在这种情况下,您将能够通过多个数据集发送模型。然后用您的Razor代码遍历该集合(@foreach (var item in Model.Users)
)以构建您的JSON或Javascript对象数组
感谢您的重播THG。我尝试过类似的方法,但在
还有一些更多的想法在这里http://stackoverflow.com/questions/3365551/asp-net-mvc-how-to-convert-view-model-into-json-object – TGH 2014-10-31 02:59:26
@TGH,我认为你失踪了引用'var jsonObj ='@ Html.Raw(Json.Encode(Model))';' – 2014-10-31 03:03:46