我有一个令人讨厌的大问题,我有一个观点:
@{
if(ViewBag.Section == "Home")
{
<div id="headerfrontPage">
}
else
{
<div id="header">
}
}
我收到编译错误:
代码块缺少结束“}”字符。确保你有 该块中所有“{”字符的匹配“}”字符, 并且没有任何“}”字符被解释为标记。
我如何有条件地写一个div?它基本上是一个黑客......
答案 0 :(得分:22)
当你将div包含在内部元素中时,你可以使用相同的构造:
@if (ViewBag.Section == "Home")
{
<text><div id="headerfrontPage"></text>
}
else
{
<text><div id="header"></text>
}
或者你使用razor syntax @:like
@if (ViewBag.Section == "Home")
{
@:<div id="headerfrontPage">
}
else
{
@:<div id="header">
}
但是对于你目前的情况,我更喜欢Ron Sijm的解决方案:
@{
var divName = ViewBag.Section == "Home" ? "headerfrontPage" : "header";
}
<div id="@divName">
答案 1 :(得分:9)
我怀疑是因为你的div没有关闭,所以剃刀假设结束括号实际上是div内容的一部分。
您可以尝试在其中输出代码中的整个div内容,包括结束标记,或者使用Response.Write或类似的东西输出div标记,这样就没有令人困惑的标记。
编辑:也可以将你的div标签包含在
中<text></text>
可能值得一试。
答案 2 :(得分:7)
你可以试试这个:
@{
string divName;
if(ViewBag.Section == "Home")
{
divName = "headerfrontPage";
}
else
{
divName = "header";
}
}
<div id="@divName">
我不确定这是否会有所帮助,这是一个很长的过程。但至少imo看起来更好......
答案 3 :(得分:2)
试试这个:
@if (ViewBag.Section == "Home")
{
<text> <div id="headerfrontPage"> </text>
}
else
{
<text> <div id="header"> </text>
}
答案 4 :(得分:2)
最简单的方法是:
<div id="@(ViewBag.Section == "Home" ? "headerFrontPage" : "header")">
或者,如果您愿意,可以使用本地变量:
@{ var headerID = ViewBag.Section == "Home" ? "headerFrontPage" : "header"; }
<div id="@headerID">
关于Razor代码块中未闭合标签的更一般情况,您可以explicitly mark the opening tag as content:
@if (ViewBag.Section == "Home")
{
@:<div id="headerFrontPage">
}
else
{
@:<div id="header">
}