为何调用字符串列表元素时未返回字符串?(附代码报错)
解决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
相关产品推荐
相关产品推荐

