C# 剃刀对流

C# 剃刀对流,c#,razor,C#,Razor,我一直在使用Razor模板系统,但遇到了一致的语法错误。在我的许多.cshtml文件中,我在一行代码中多次在.cs和.js之间交换,这会导致intellisense变得混乱 范例 <script type="text/javascript" id="dtscript"> ///... @if (!string.IsNullOrWhiteSpace(ColumnDefs)) { @:columnDefs: @model.ColumnDefs, } ///... </scr

我一直在使用Razor模板系统,但遇到了一致的语法错误。在我的许多.cshtml文件中,我在一行代码中多次在.cs和.js之间交换,这会导致intellisense变得混乱

范例

<script type="text/javascript" id="dtscript">
///...
@if (!string.IsNullOrWhiteSpace(ColumnDefs))
{
    @:columnDefs: @model.ColumnDefs,
}
///...
</script>

它不能包装在“”或“”中,否则插件无法解析代码

您应该将大部分逻辑移到控制器。这意味着:

@if (!string.IsNullOrWhiteSpace(ColumnOrder))
应位于控制器内部:

if(!string.IsNullOrWhiteSpace(ColumnOrder)) ViewBag.Something = ...;
在razor中,将所需状态初始化为javascript变量:

var something = "@ViewBag.Something"; //this is a javascript line

根据我的经验,Visual Studio的intellisense在这种情况下工作正常,并将
@ViewBag.Something
识别为razor语法(但请注意双引号,它们属于javascript,包含字符串值)。

目前已知此语法错误问题,并将其标记为延迟


使用建议的解决方法目前已经足够好了。

简单的答案-不要将JavaScript混入剃须刀中!这只会让你的代码很难维护。相反,创建一个JSON对象并从一个
GET
请求返回它,在JavaScript中使用它。虽然我同意你的回答,但这个方法是我能想到的唯一满足我们要求的方法。我在幕后使用JSON对象,但由于生成的代码是基于使用情况的动态代码,因此我没有静态代码可依赖。用户在他们的视图中定义模式(通过一个流畅配置的渐进式界面),这个库返回给他们呈现的.js代码。在继续这条路线之前,仔细考虑一下,看看是否可以重构它。与其他人的想法相反,Razor不仅仅是一个MVC视图引擎,它首先是一个模板引擎。OP,我想这只是强迫症的一个例子:-)如果它生成了正确的代码,忽略这些扭曲,继续前进。LOL是的,我想有一点强迫症。我正试图将此方法形式化,以便团队的其他成员对其他插件进行模板化,我不想说。“别担心那个歪歪扭扭的,那个没问题。”–“@ViewBag.Something”会在生成的代码中添加中断代码,即包装“查看我的更新以获取生成内容的示例”。
if(!string.IsNullOrWhiteSpace(ColumnOrder)) ViewBag.Something = ...;
var something = "@ViewBag.Something"; //this is a javascript line