将MVC .NET Razor与Javascript结合起来构建一个数组

将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]) 
    } 
+0

感谢您的重播THG。我尝试过类似的方法,但在

+0

还有一些更多的想法在这里http://stackoverflow.com/questions/3365551/asp-net-mvc-how-to-convert-view-model-into-json-object – TGH 2014-10-31 02:59:26

+0

@TGH,我认为你失踪了引用'var jsonObj ='@ Html.Raw(Json.Encode(Model))';' – 2014-10-31 03:03:46

<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> 
+0

谢谢tvanfosson。我肯定错过了什么。你的代码也不行。在

+0

这只是一个解析错误。创建一个名为identity的函数:'function identity(val){return val; }'和do:'var jsArr = identity(@ Html.Raw(Json.Encode(arr)));'如果你想摆脱语法错误。 – 2014-10-31 03:12:15

+0

至于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对象数组