任何人都可以将此ASP.NET语法转换为RAZOR语法吗?我无法将其“一对一”转换为Razor语法。
<% Themes.ThemesAvailable().ForEach(i =>
{
if (i.Equals(Themes.ThemeToUse))
{%>
<a href="" id="A1" style="font-size:x-large;color:Red"><%:i%></a>
<%}
else
{%>
<a href="" style="color:Blue" id="ChangeThemeTo_<%:i%>"><%:i%></a>
<%} %>
<br />
<% });%>
以下不起作用(抱怨CS0201:只能使用赋值,调用,递增,递减和新对象表达式作为语句)
@Themes.ThemesAvailable().ForEach(i => {
if (i.Equals(Themes.ThemeToUse)){
@:<a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a>
;}else{
@:<a href="" style="color:Blue" id='ChangeThemeTo_@i'>@i</a>
;} })
并且这不起作用(突然在页面line1 col1的顶部预期'}'
@Themes.ThemesAvailable().ForEach(i =>
{
if (i.Equals(Themes.ThemeToUse)){
@<text><a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a></text>
;} else {
@<text><a href="" style="color:Blue" id='ChangeThemeTo_@i'>@i</a></text>
;}
})
似乎@i在id ='ChangeThemeTo_ @ i'中停止了结束文本标记的工作。如果我删除'@'元素有效。但是获得与第一次转换尝试相同的错误(CS0201)。
删除lambda的用法,这是有效的,但只有当我从id ='ChangeThemeTo_i'中删除'@'时
@foreach (var i in Themes.ThemesAvailable()){
if (i.Equals(Themes.ThemeToUse)){
<a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a>
} else {
<a href="" style="color:Blue" id='ChangeThemeTo_i'>@i</a>
}
}
答案 0 :(得分:2)
首先,我认为你过度使用@符号会给你带来问题。尝试:
@foreach(var i in Themes.ThemesAvailable())
{
if (i.Equals(Themes.ThemeToUse))
{
<text><a href="" id="A1" style="font-size:x-large;color:Red"> + @i + </a></text>
}
else
{
<text><a href="" style="color:Blue" id='ChangeThemeTo_@i'>@i</a></text>
}
}
修改强>
对于你没有正确写出id属性的最新问题,请尝试使用string.Format:
<a href="" style="color:Blue" id="@(string.Format("ChangeThemeTo_{0}", i))">@i</a>
或简单地连接它们:
<a href="" style="color:Blue" id="@("ChangeThemeTo_" + i)">@i</a>
答案 1 :(得分:0)
所以显然你需要在代码之前使用文本来使标记解析器工作
@foreach(var theme in Themes.ThemesAvailable()) {
if (theme.Equals(Themes.ThemeToUse))
<a href="" id="a1" style="font-size:x-large;color:Red">@theme</a>
else
<a href="" style="color:Blue" id="ChangeThemeTo_@(theme)">@theme</a>
}
以上是您的代码工作所必需的一切。您不需要使用text
标记的原因是因为text
只是一个看起来像html的模型html标记,因此它会强制解析器进入html模式。由于真正的html标签做同样的事情,你不需要使用文本。您需要在id标记中使用@(theme)
作为第二个锚标记的原因可能是因为它看起来类似于电子邮件地址,并且解析器被告知忽略看起来像电子邮件地址的任何内容。您可以通过尝试ChangeThemeTo_ @theme
之间的空格来验证这一点,您会发现它有效。 @()
用于强制编译器识别()
之间的代码。我希望这有助于您更好地理解解析器。