如何将C#中的字符串列表传递至JavaScript并实现字符串值匹配校验
实现方案
1. C# 字符串列表传递到JavaScript的方法
根据你的项目场景,常用两种实现方式:
场景1:Razor视图(ASP.NET MVC / Razor Pages)直接内嵌传递
这是最常用的服务端渲染场景传值方案:
首先在C#后端把列表挂载到视图上下文:
// 控制器/PageModel 代码 List<string> fruits = new List<string>{"Apple","Mango","Orange"}; // 用ViewBag传递,也可以根据项目规范用强类型视图模型传递 ViewBag.FruitList = fruits;
然后在Razor视图中,将列表序列化为JSON字符串直接输出到JS上下文,要加Html.Raw避免内容被HTML转义:
<script> // 直接把C#列表转换为JS原生数组 const validFruits = @Html.Raw(System.Text.Json.JsonSerializer.Serialize(ViewBag.FruitList)); </script>
场景2:前端异步获取
如果是前后端分离、或者需要动态刷新列表的场景,后端新增接口返回JSON格式的水果列表,前端用fetch/axios/jQuery.ajax请求拿到数组即可。
2. 校验逻辑完善
你现有代码存在两处明显问题:
- JS条件判断关键字
if首字母大写,属于语法错误 - 选择器
closest('ui')大概率是笔误,常规列表标签为ul - 原有校验仅匹配固定值,可以扩展大小写兼容、合法列表校验的能力
完善后的JS代码如下:
$(document).on('click','#dvAppContent input:checkbox[id*=chkfunction]', function () { ToggleApplication(this); }); function ToggleApplication(currentFunction) { var fruitName = $(currentFunction).closest('ul').parent('label').text().trim(); // 兼容大小写匹配,不需要可以去掉toLowerCase处理 const formattedFruitName = fruitName.toLowerCase(); // 仅需要校验是否为Apple的写法 if (formattedFruitName === "apple") { return true; } // 如果需要校验是否在C#传递的合法水果列表中,用以下逻辑 const isLegalFruit = validFruits.some(item => item.toLowerCase() === formattedFruitName); if (isLegalFruit) { // 匹配成功的业务逻辑 return true; } // 匹配失败的业务逻辑 return false; }
内容的提问来源于stack exchange,提问作者user6462369
相关产品推荐
相关产品推荐

