javascript - 如何在 View 中访问我的 C# 数组?

标签 javascript c# asp.net-mvc razor

我的 Controller 中有一个数组,我正在将其传递给我的 View ,并且(暂时)我尝试console.log数组中的一些值(只是为了使确保我正确地传递了数组。)

我尝试使用 ViewData 发送它并通过 Razor 代码访问它,但 Razor 不允许我执行任何 JavaScript 函数(例如 console.log).

我尝试了几种不同的解决方案,但无法想出任何有效的解决方案,这是让我最接近的解决方案:

查看

function logValues()
{
    console.log("test");      
    @{var capacity = ViewData["Capacity"] as string[]; }
    for (var i = 0; i < 5; i++)
    {
        console.log(capacity[i]);
    }
}

Controller

var uspCapacity = from d in db.uspGetEventKillSheetDetailedReport(option, date)
                  select new
                  {
                     d.Capacity
                  };
var uspCapacityList = uspCapacity.ToList();
ViewData["Capacity"] = uspCapacityList;

控制台将成功记录“测试”,但无法访问我的容量变量..因为我在 Razor 中定义它并尝试在 Razor 外部访问它。如何使用 Javascript 命令访问它?

最佳答案

您可以将 C# 数组转换为 JSON 并将其分配给 JS 变量:

<script>
    var capacity = @Html.Raw(Json.Encode(ViewData["Capacity"]));

    // now you can use capacity like any other JS variable...
    for (var i = 0; i < capacity.length; i++) {
        console.log(capacity[i]);
    }
</script>

Json.EncodeSystem.Web.Helpers 中定义,并且应该在每个 MVC 项目中可用。

关于javascript - 如何在 View 中访问我的 C# 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45194032/

相关文章:

c# - 使用服务进行验证时如何对 IValidatableObject Validate 进行单元测试?

c# - 实现多状态规划器

c# - Blazor Wasm 授权状态记录多次

c# - AES 解密 - 将代码从 C# 移植到 Java

css - 下拉菜单低于部分 View 的可见区域

c# - 获取特定列的 Entity Framework Lambda 表达式

javascript - 与 rootScope 交互的指令在 Angular JS 中不起作用

javascript - 递归遍历一个json对象 Results in "uncaught syntaxError: Illegal return statement"

javascript - 使用 useState() Hook 时 const 变量 'count' 如何更新

javascript - span 上 div 指定条件的倒计时