Roh*_*ews 5 .net c# html5 razor
我正在使用以下代码用数据填充表.该if声明没有按照我的预期运作.条件块中的两个语句都被执行.
@if (--somecondition--)
{
<table>
foreach (Message userMessage in UserMessages)
{
<tr>
if(@userMessage.Message.MessageText.Length <= 10)
{
<td>
@userMessage.Message.MessageText
</td>
}
if(@userMessage.Message.MessageText.Length > 10)
{
<td>
@userMessage.Message.MessageText.Substring(0, 10)
</td>
}
</tr>
}
</table>
}
Run Code Online (Sandbox Code Playgroud)
我在这里失踪了什么?不是这样的使用不可能吗?
编辑(看到答案后):
我想 -
进入代码后,您不需要使用"@"作为"if"的结构前缀
mus*_*fan 11
你需要从@... 开始
@foreach (Message userMessage in UserMessages)
{
Run Code Online (Sandbox Code Playgroud)
和...
@if(userMessage.Message.MessageText.Length <= 10)
{
Run Code Online (Sandbox Code Playgroud)
如果没有它,if(它仍然被视为HTML.
该@符号标识Razor语法的开头(即C#代码),并将继续成为剃刀代码块,直到达到适当的终结符.有许多方法可以将其移回HTML,在您的示例中最常见的方法是包含一个html标记,例如<td>.
这是您的代码的完整版本,希望它可以帮助您了解它应该如何工作:
<table>
//due to the table tag, we are current inside HTML
//so we need to use the @ symbol to move back to razor syntax
@foreach (Message userMessage in UserMessages)
{
<tr>
//using this tag again changes us back to HTML mode
//so again we must use the at symbol
@if(userMessage.Message.MessageText.Length <= 10)
{
//still Razor
<td>
//back in HTML mode
@userMessage.Message.MessageText
</td>
}
@if(userMessage.Message.MessageText.Length > 10)
{
<td>
@userMessage.Message.MessageText.Substring(0, 10)
</td>
}
</tr>
}
</table>
Run Code Online (Sandbox Code Playgroud)
(我知道这些评论在Razor中不起作用所以不要添加它们)
并清理你最初的想法.如果您没有第一个<tr>标签,那么以下内容将起作用......
@foreach (Message userMessage in UserMessages)
{
if(userMessage.Message.MessageText.Length <= 10)
{
Run Code Online (Sandbox Code Playgroud)
注意整个if语句行不需要@符号,因为我们从未移回到HTML模式.