Razor的script标签中添加C#条件的语法及多行JS优化问询
在Razor的script标签中添加C#条件的最优写法
在Razor的cshtml文件中,script标签内嵌入C#条件逻辑的核心是利用Razor原生代码块语法,无需过度依赖Html.Raw或三元表达式(仅极简场景适用),以下是针对不同场景的更优写法:
先看你的两种尝试的优化空间
- 尝试1:可行但冗余,
Html.Raw在无特殊转义需求时完全可以省略,Razor会自动识别代码块内的JS内容并输出。 - 尝试2:适合极简单语句场景,但面对多行JS代码时,拼接字符串的方式会大幅降低可读性和可维护性。
基础单语句场景
直接用@if代码块包裹JS代码即可,写法简洁直观:
@section scripts{ <script> $(document).ready(function() { @if (Model.IsAdding) { window.scrollTo(0, document.body.scrollHeight); } }); </script> }
多行JavaScript代码场景
无需将多行JS拼接成字符串,直接在@if代码块内编写完整的多行JS逻辑,Razor会完整输出所有内容:
@section scripts{ <script> $(document).ready(function() { @if (Model.IsAdding) { // 多行JS示例:平滑滚动到底部+日志输出 const scrollTarget = document.body.scrollHeight; window.scrollTo({ top: scrollTarget, behavior: 'smooth' }); console.log('已滚动至页面底部'); } }); </script> }
带else分支的场景
直接扩展@if结构,逻辑清晰易维护:
@section scripts{ <script> $(document).ready(function() { @if (Model.IsAdding) { window.scrollTo(0, document.body.scrollHeight); } else { window.scrollTo(0, 0); // 添加时滚到底部,否则回到顶部 } }); </script> }
分离C#与JS逻辑的进阶写法
如果逻辑更复杂,可以先将C#模型属性转换为JS变量,再用纯JS处理条件,降低耦合度:
@section scripts{ <script> // 将C#布尔值转为JS原生布尔值 const isAdding = @Model.IsAdding.ToString().ToLower(); $(document).ready(function() { if (isAdding) { window.scrollTo(0, document.body.scrollHeight); } }); </script> }
内容的提问来源于stack exchange,提问作者napsebefya
相关产品推荐
相关产品推荐

