我正在努力寻找在我的mvc视图页面上的foreach循环中创建switch语句的正确语法。
这是我迄今为止的最新尝试(在许多其他人之后),但Razor引擎不会接受它。此处错误位于@foreach
,表示缺少结束}
@foreach (var item in Model) {
String s = item.RegistrationStatus.ToString();
// Make sure this mirrors values in RegistrationStatus enum!
switch (s)
{
case "New":
<tr class='info'>
break;
case "Arrived":
<tr class='success'>
break;
default:
<tr>
}
......
}
答案 0 :(得分:18)
你可以像贾斯汀所说的那样做,就像这样:
@foreach (var item in Model) {
String s = item.RegistrationStatus.ToString();
// Make sure this mirrors values in RegistrationStatus enum!
switch (s)
{
case "New":
@:<tr class='info'>
break;
case "Arrived":
@:<tr class='success'>
break;
default:
@:<tr>
break;
}
......
}
但是,如果您正在运行MVC4 with Razor V2,则可以轻松使用辅助方法(或常规方法):
public static class MyHelperExtensions
{
public static string GetCssClass(this HtmlHelper helper, RegistrationStatus status)
{
// Make sure this mirrors values in RegistrationStatus enum!
switch (status)
{
case RegistrationStatus.New:
return "info";
case RegistrationStatus.Arrived:
return "success";
default:
return null; // Return null so that the attribute won't render.
}
}
}
然后像这样使用它:
@foreach (var item in Model)
{
<tr class='@Html.GetCssClass(item.RegistrationStatus)'>
.....
}
这更易读,更易于维护。如果GetCssClass()方法返回null
,则Razor V2甚至不会呈现属性(在本例中为class=
)。
答案 1 :(得分:2)
您可以使用Html.Raw方法:
case "New":
Html.Raw("<tr class='info'>")
break;
另请参阅MVC3 Razor: Displaying html within code blocks了解其他选项,例如:
case "New":
@:<tr class='info'>
break;
答案 2 :(得分:0)
有时候使用{在一个单独的行中更好。通过这种方法,您可以获得更多代码。另一方面,你得到清晰的html标签行,没有&#34; @:&#34;垃圾。这允许您快速复制粘贴整个html行&#34;按原样#34;在&#34;浏览器中&#34;来自/到真正的html调试。
@foreach (var item in Model) {
String s = item.RegistrationStatus.ToString();
// Make sure this mirrors values in RegistrationStatus enum!
switch (s)
{
case "New":
{
<tr class='info'>
}
break;
case "Arrived":
{
<tr class='success'>
}
break;
default:
{
<tr>
}
break;
}
......
}
答案 3 :(得分:0)
ASP NET CORE 2.2 MVC的变体
@foreach (var item in Model) {
String s = item.RegistrationStatus.ToString();
// Make sure this mirrors values in RegistrationStatus enum!
switch (s)
{
case "New":
@Html.Raw("<tr class='info'>")
break;
case "Arrived":
@Html.Raw("<tr class='success'>")
break;
default:
@Html.Raw("<tr>")
break;
}
......
@Html.Raw("/<tr>")
}