You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

报错‘IJsonHelper未定义Encode方法’,如何在视图中转字符串列表为JS数组?

解决‘IJsonHelper' does not contain a definition for 'Encode'’错误

嘿,这个问题我碰到过好多次了,其实根源是框架版本的差异——你用的是ASP.NET Core,而Json.Encode是旧版ASP.NET MVC(Framework)里的方法,在ASP.NET Core中,IJsonHelper已经移除了Encode方法,取而代之的是Serialize方法来处理JSON序列化。

下面给你分步解决的方案:

1. 直接替换方法名修复错误

把你原来代码里的Json.Encode改成Json.Serialize就行,还要注意Razor语法的小细节——不需要在allusers前面重复加@,因为已经在Razor代码块的上下文里了。

修正后的脚本部分代码:

<script>
    var sourcearray = null;
    $(document).ready(function () {
        var arr = JSON.parse('@Html.Raw(Json.Serialize(allusers))');
        // 后续逻辑...
    });
</script>

2. 优化异步调用(避坑提醒!)

另外,我必须提醒你:在视图里直接用.Result调用异步方法GetAllUsersAsync()是非常危险的,很容易导致线程死锁。正确的做法是把异步逻辑移到控制器里处理,再把数据传递给视图:

控制器示例代码:

public async Task<IActionResult> YourViewName()
{
    var boxManager = new DSSTools.Managers.BoxManager();
    // 用await异步获取数据,避免死锁
    var userList = (await boxManager.GetAllUsersAsync()).Entries.Select(u => u.Login).ToList();
    // 把处理好的列表传给视图
    return View(userList);
}

对应的视图调整:

把视图的模型类型改成IEnumerable<string>(因为你只需要用户的Login字段),这样代码更简洁,还省掉了JSON.parse的步骤:

@model IEnumerable<string>

@section Scripts {
    <script>
        $(document).ready(function () {
            // 直接用Json.Serialize序列化模型,Html.Raw确保不被转义
            var sourcearray = @Html.Raw(Json.Serialize(Model));
            console.log(sourcearray); // 这里已经是合法的JavaScript数组了
        });
    </script>
}

3. 旧版MVC的特殊情况(如果你用的是.NET Framework)

如果你的项目是旧版ASP.NET MVC(基于.NET Framework),那可能是缺少命名空间引用,在视图顶部添加以下代码即可:

@using System.Web.Helpers

不过从你的错误提示来看,你大概率用的是ASP.NET Core,所以优先用前面的方案。

内容的提问来源于stack exchange,提问作者Bassie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:59:26