在Asp.net mvc中,我使用.cshtml进行查看。我想知道在像这样的代码的两个哈希符号之间写线的含义
#if(actionName()!=null){ if(actionName()=='Start'){#
#和@
有什么区别答案 0 :(得分:1)
在两个#之间写一行没有内在的含义,因为您将其视为文本而不是C#/ Razor语法,所以示例中的这一行按原样编写。这不是因为#的用法,而是因为您没有将C#代码包含在任何有效的剃刀语法中。
您没有使用剃刀刀架:
@
{
//Everything written inside the razor block is evaluated as C# code. You can
have multiple lines inside this bock
}
您没有使用嵌入式剃刀语句:
@//C# syntax
您可以在其中编写在代码中得到评估的内联C#语法。通常,如果您写类似
@if(CONDITION)
{
}
@foreach(var x in COLLECTION)
{
}
您可以在封闭块旁边编写多条C#行,而无需定义更大的剃刀块。参见MSDN
因此,在示例中回答您的问题#与MVC / Razor / C#没有任何意义,因为它将在编写时在页面中以文本形式呈现。
#if(actionName()!=null){ if(actionName()=='Start'){#
这与@以外没有其他符号一样。所以如果你有
$if(actionName()!=null){ if(actionName()=='Start'){$
它将在最后一页中写为$if(actionName()!=null){ if(actionName()=='Start'){$
文本。在最后一页中,第一个文字应为#if(actionName()!=null){ if(actionName()=='Start'){#
文字。
现在,如果您拥有@if(actionName()!=null){ if(actionName()=='Start'){@
,则由于@
,它将被视为剃刀表达式,并且您将得到一个错误,因为那不是有效的剃刀表达式。
它与使用#或$之类的符号无关。您只是在写任何时候的文字(因为您实际上并没有使用@
写一个剃刀表达式),因此任何内容都是有效的,并且将按原样呈现为文本。符号或没有符号。
答案 1 :(得分:0)
Ahmed,您可能会发现此链接有帮助: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives/preprocessor-if
通过上面的链接...
#if以及#else,#elif,#endif,#define和#undef伪指令可让您基于一个或多个符号的存在来包含或排除代码。在为调试版本编译代码或为特定配置进行编译时,这很有用。
// C#
/#if DEBUG
Console.WriteLine("Debug version");
#endif
答案 2 :(得分:-1)
如果在if条件或.cshtml中的文本之间添加#,例如
1. #if(1!=2){ <p>True</p> }else{<p>False</p>}#
2. #Hello#
它只会在UI(View)中呈现相同的文本。
如果为1,则如果在开头放置put @,它将成为cshtml中的有效if条件。
@if(1!=2){ <p>True</p> }else{<p>False</p>}
在用于.cshtml的asp.net mvc(剃刀引擎)中,@字符启动内联表达式,单语句块和多语句块。请查看链接以获取更多详细信息。
编辑:@Stephen这显然可行。
Contact.cshtml
@{
ViewBag.Title = "Contact";
}
@if (1 != 2){ <p>True</p> }else{<p>False</p>}
#Hello#
#if(1!=2){ <p>True</p> }else{<p>False</p>}#