C# 什么时候使用razor在复合字符串格式中使用引号?

C# 什么时候使用razor在复合字符串格式中使用引号?,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,这个答案解决了我的问题,但并没有解释为什么字符串格式中的razor语法以以下方式工作 <button type="button" onclick="wea.open('editDinner', {params: {id: @o.Id }})" class="wea-btn"> 如果@o.Id是整数类型,则不会导致js错误,但如果更改为GUID类型,则需要在razor语法周围加上单引号 <button type="button" onclick="wea.open('edi

这个答案解决了我的问题,但并没有解释为什么字符串格式中的razor语法以以下方式工作

<button type="button" onclick="wea.open('editDinner', {params: {id: @o.Id }})" class="wea-btn">

如果@o.Id是整数类型,则不会导致js错误,但如果更改为GUID类型,则需要在razor语法周围加上单引号

<button type="button" onclick="wea.open('editDinner', {params: {id: '@o.Id' }})" class="wea-btn">

除了@o.Id周围的单引号外,其他都是相同的


这里的razor语法是否根据属性类型(int vs Guid)进行了不同的处理?什么时候应该使用引号以及为什么使用引号?

在本例中,是JavaScript语法规则规定了引号的用法(而不是Razor规则)。使用一个简单的整数可以解析对象;但是GUID生成的JavaScript无效,因此需要引号

{ id: 1 }  // ok
{ id: 35aa3122-7d73-4758-ac00-f4150f289767 } // invalid js

这与Razor无关,Json就是这样工作的,即使使用代码编码的值,您也需要这些引号。因此JS需要将Guid视为字符串?如果插入Razor语句,则会导致JavaScript无效。