在Razor中使用js变量

js变量不能与razor混合使用,请教正确使用方式?


var selectItem = $("#ulList .nav-item").find(".active").text();
var setVal = @lst.FirstOrDefault(o => o.Name == @selectItem)?.SetVal;//@selectItem不能与razor混合使用

要在Razor视图中使用JavaScript变量,可以通过以下方式将其传递到视图中:

  1. 在视图中声明一个JavaScript变量

例如,在你的HTML页面中添加以下代码:

<script>
    var myVariable = "Hello World!";
</script>
  1. 在Razor视图中使用该变量

例如,在Razor视图中添加以下代码:

@{
    string myString = "<script>document.write(myVariable)</script>";
}

@Html.Raw(myString)

这将输出JavaScript变量myVariable的值(即“Hello World!”)。

请注意,为了防止跨站点脚本攻击,Razor默认会对文本进行编码,因此必须使用Html.Raw方法来告诉Razor不要对变量进行编码。

  • 这篇博客: Razor视图中的@:和语法中的 js代码与C#代码混编 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1、js中嵌套C#的if结构
    混编代码:
    这里写图片描述

    浏览器截图:
    这里写图片描述

    2、js中自有的if结构
    当if语句的判断条件用到字符串类型的C#变量的值时,需要额外加上”“,否则C#变量的值会被当做js中的变量名,从而引发错误。
    js中用到bool类型的C#变量的值时,也需要额外加上”“,否则报错:True is not defined或False is not defined,因此推断js中用到char、DateTime等其他类型的C#变量的值时,均需要额外加上”“,先把C#变量的值变为普通字符串,然后才能进行其他操作。int、float不需要额外加上”“。

    不加”“的混编代码:
    这里写图片描述

    不加”“的浏览器截图:
    这里写图片描述

    加”“的混编代码:
    这里写图片描述

    加”“的浏览器截图:
    这里写图片描述

    3、js中嵌套C#的foreach(){ if(){ } }结构
    混编代码:
    这里写图片描述

    浏览器截图:
    这里写图片描述

    4、js中自有的foreach(){ if(){ } }结构
    js不能识别List< string>类型的数据,可以使用json数组来代替List< string>,前台对json数组进行循环操作即可。js中要用for(var index in array){ }来做循环操作,此处的index指的是数组索引值。

    后台代码如下:
    这里写图片描述

    var array=@Html.Raw(@Model.CityListJson);的作用等价于本方法中注释掉的三行代码的作用,前台代码如下:
    这里写图片描述

    浏览器截图如下:
    这里写图片描述