gpt4 book ai didi

c# - Razor 约定

转载 作者:太空宇宙 更新时间:2023-11-03 15:54:24 24 4
gpt4 key购买 nike

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

例子

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

在上一行中,@ColumnDefs 之后的尾随逗号是一个语法错误,但是当 .cshtml 文件编译并且我渲染模板时,渲染代码是正确的。此语法错误适用于生成代码的替代方法...

@if (!string.IsNullOrWhiteSpace(ColumnOrder))
{
<text>order: @model.ColumnOrder</text>,
}
//or
@if (!string.IsNullOrWhiteSpace(ColumnOrder))
{
<text>order: @model.ColumnOrder,</text>
}

由于模板生成了正确的 View ,我在解决语法错误方面进展缓慢,但我已经厌倦了所有的红色波浪线。所以我的问题是拼接 .cs 和 .js 的正确方法是什么,以避免在整个 razor 文件中错误地报告语法错误。

更新:让我稍微扩展一下这个场景。没有 Controller ,这个系统是一个独立的库。模板系统与产品无关,是通用插件的领域特定语言的一部分。 @model.ColumnDefs 实际上是一个 json 对象,呈现为以下代码。

columnDefs: [{"sortable":false,"targets":[0,3]},
{"visible":false,"targets":[0,7]},
{"searchable":false,"targets":[0]},
{"name":"Id","targets":0},
{"name":"Email","targets":1},
{"name":"Name","targets":2},
{"name":"IsAdmin","targets":3},
{"name":"Salary","targets":4},
{"name":"Position","targets":5},
{"name":"Hired","targets":6},
{"name":"Number","targets":7}],

不能用""或''包裹,否则插件无法解析代码。

最佳答案

您应该将大部分逻辑移至 Controller 。这意味着行:

@if (!string.IsNullOrWhiteSpace(ColumnOrder))

应该在 Controller 内部:

if(!string.IsNullOrWhiteSpace(ColumnOrder)) ViewBag.Something = ...;

在 razor 中,将您想要的状态作为 javascript 变量启动:

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

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

关于c# - Razor 约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24248030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com