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

为何调用字符串列表元素时未返回字符串?(附代码报错)

解决JS语法错误:Unexpected token ':'(本地文件路径渲染问题)

你当前的代码中,C#的vidFilescs存储的是本地文件路径(比如C:\source\repos\htmlscreen\vids\xxx.mp4),直接通过Razor渲染到JS变量时,未正确处理字符串包裹和转义,导致JS解析时把路径里的冒号当成非法语法标记,抛出Uncaught SyntaxError: Unexpected token ':'错误。


方案1:手动转义路径并包裹引号

修改JS代码,让C#输出的路径先转义反斜杠,再用引号包裹成合法JS字符串:

// 转义路径中的反斜杠,并用双引号包裹
vidsrc = "@IndexModel.vidFilescs[IndexModel.count].Replace(@"\", @"\\")";
function newVid() {
    videoplayer.src = vidsrc;
}

Replace(@"\", @"\\")会把C#路径里的单个反斜杠转换成JS能识别的双反斜杠,外层的双引号确保整个路径是合法的JS字符串。

方案2:用Json.Encode自动处理(更安全)

借助ASP.NET的Json.Encode方法,自动完成字符串的引号包裹和特殊字符转义,避免手动处理的疏漏:

vidsrc = @Html.Raw(Json.Encode(IndexModel.vidFilescs[IndexModel.count]));
function newVid() {
    videoplayer.src = vidsrc;
}

Json.Encode会把C#字符串转换成符合JS语法的字面量,同时处理反斜杠、引号等特殊字符,确保渲染后的JS代码完全合法。

额外注意事项

浏览器通常会限制直接访问本地文件系统路径(C:\...),即使语法正确也可能无法加载视频。建议将视频文件放到网站的静态资源目录(比如wwwroot/videos),然后用相对路径或网站绝对路径存储到vidFilescs中,示例:

// 修改C#的syncVids方法,存储相对路径
public static void syncVids()
{
    var basePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "videos");
    var files = Directory.GetFiles(basePath);
    vidFilescs.Clear();

    foreach (var file in files)
    {
        // 转换为网站可访问的相对路径,比如 "/videos/xxx.mp4"
        var relativePath = "/" + Path.GetRelativePath(basePath, file).Replace("\\", "/");
        vidFilescs.Add(relativePath);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:25:27