我一直在使用剃刀仿製系統,但遇到了一致的語法錯誤。在我的許多.cshtml文件中,我在一行代碼中多次交換.cs和.js,導致intellisense感到困惑。剃刀召集
例
<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>
}
因爲模板生成正確的觀點我一直對解決語法錯誤慢,但我厭倦了所有的紅色波浪線的。所以我的問題是拼接.cs和.js的正確方法是避免在整個剃刀文件中錯誤地報告語法錯誤。
更新: 讓我稍微展開這個場景。沒有控制器,這個系統是一個獨立的庫。模板系統是產品不可知的,並且是通用插件的域特定語言的一部分。 @ 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}],
它不能被包裹在「」或「'中,否則插件無法解析代碼。
簡單的答案 - 不要混入你的JavaScript到你的剃鬚刀!這隻會讓你的代碼難以維護。相反,創建一個JSON對象並從'GET'請求中返回它,在你的JavaScript中使用它。 – Ian
儘管我同意你的回答,但伊恩這種方法是我能夠提出的唯一符合我們要求的方法。我在後臺使用JSON對象,但由於生成的代碼是基於使用情況的動態代碼,因此我沒有靜態代碼可供依賴。用戶在其視圖中定義模式(通過流暢配置的漸進式界面),並且該庫返回呈現的.js代碼。 – Siegeon
在繼續沿着這條路線前花點時間思考,看看能不能重構它 – Ian