foreach中的switch语句的正确剃刀语法

Chi*_*ago 14 asp.net-mvc razor

我有一段时间试图找到在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>

    }


......

}
Run Code Online (Sandbox Code Playgroud)

Mar*_*num 19

你可以像贾斯汀所说的那样做,就像这样:

@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;
    }

    ......
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用Razor V2运行MVC4,您可以轻松地使用辅助方法(或常规方法):

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.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

@foreach (var item in Model)
{    
    <tr class='@Html.GetCssClass(item.RegistrationStatus)'>

    .....
}
Run Code Online (Sandbox Code Playgroud)

这更易读,更易于维护.如果GetCssClass()方法返回,null则Razor V2甚至不会呈现属性(在本例中class=).

  • @ChiliYago我通常在根目录中创建一个名为*Helpers*或*Extensions*的文件夹.另外,不要忘记在*Views\Web.config中添加`MyHelperExtensions`类的命名空间* - >`<configuration> <system.web.webPages.razor> <pages pageBaseType ="System.Web.Mvc.WebViewPage "> <namespaces>`以便它在您的视图中自动显示. (2认同)