如何使用 Razor 视图引擎在 JavaScript 中正确混合 C# 代码。我希望根据 ViewBag 中的值包含或省略 Javascript

Posted

技术标签:

【中文标题】如何使用 Razor 视图引擎在 JavaScript 中正确混合 C# 代码。我希望根据 ViewBag 中的值包含或省略 Javascript【英文标题】:How do I properly mix C# code within JavaScript, using Razor view engine. I wish to include or omit Javascript based on a value in ViewBag 【发布时间】:2012-03-22 06:04:42 【问题描述】:

所以我只希望这个 javascript 包含在对浏览器的响应中 如果 ViewBag.L1Cat 不等于 null。目前我收到错误: 无法对空引用执行运行时绑定。以及调试器 由于某种原因不想在 if 语句中停止。 ViewBag 原为 在返回的操作方法中填充了相应的键\值对 视图。

 <script type="text/javascript">
 @
    if(ViewBag.L1Cat != null)
    
       <text>              
          var FirstLevel = 
                    $('#MenuContainer')
                       .find('.FirstLevel')
                       .attr('@(ViewBag.RootCat.ToString());');
       </text>        
     
       
 </script>

【问题讨论】:

您的错误是 C# 编译错误? html 渲染是否正确。 【参考方案1】:

一定要省略代码吗?

您可能会发现采用这种方法更简洁:

<script type="text/javascript">
var doStuff = @(ViewBag.L1Cat != null ? "true" : "false");
if (doStuff)

var FirstLevel = $('#MenuContainer').find('.FirstLevel').attr('@(ViewBag.RootCat.ToString())');

</script>

或者

<script type="text/javascript">
@if(ViewBag.L1Cat != null)

 <text>              
  var FirstLevel = $('#MenuContainer').find('.FirstLevel').attr('@(ViewBag.RootCat.ToString())');
 </text>        

</script>

【讨论】:

首选,为什么要发送响应中不会用到的不必要数据。 因为它会弄乱你的代码。干净的代码 > 随机优化

以上是关于如何使用 Razor 视图引擎在 JavaScript 中正确混合 C# 代码。我希望根据 ViewBag 中的值包含或省略 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

Razor视图引擎

Razor视图中的@:和语法

我可以为 Razor 页面使用第三方视图引擎吗? [关闭]

ASP.Net MVC开发基础学习笔记:三Razor视图引擎控制器与路由机制学习

在剃刀视图引擎中转义@字符

HTML 编码字符串 - ASP.NET Web 窗体 VS Razor 视图引擎