c# - Razor 约定

标签 c# razor

我一直在使用 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/

相关文章:

c# - 在不使用 for 循环的情况下用十进制计算 IEnumerable<decimal>

asp.net-mvc-3 - 如何为 Html.LabelFor<> (MVC Razor) 指定 ID

c# - 将记录追加到 Xml ASP.Net MVC5

asp.net - 如何创建模型绑定(bind)的“是/否”单选按钮,该按钮在 ASP.NET MVC 中的页面加载时未选择任何选项?

c# - 使用 Ionic.zip 从字节数组中读取 zip 文件

c# - 嵌套对象上的条件 Linq 选择

c# - 在步骤 C# 中将用户输入添加到数组?

asp.net-mvc-3 - ASP.Net MVC3 Html.PasswordFor 不填充

jquery - 如何为日期时间选择器文本框应用样式

c# - 其中 t : class generic constraint and const value declaration