Html.DisplayFor(modelItem => item.Status) - 将其传递给switch语句

时间:2011-07-13 16:37:18

标签: asp.net asp.net-mvc visual-studio-2010

我对MVC很新,但我有以下代码:

    <td>
        @Html.DisplayFor(modelItem => item.Status)
        @switch (item.Status)
        {
            case 0: Html.DisplayText("Requested");
                break;
            case 1: Html.DisplayText("In Progress");
                break;
            case 2: Html.DisplayText("Declined");
                break;
            default:
                Html.DisplayText("Undefined");
                break;
        }
    </td>

它呈现“Html.DisplayFor”很好,这是一个整数。但实际上我想在同一位置显示基于item.Status的等效文本。但这不起作用。我可以改变原始类处理Get和Set方法中状态的方式,但是我如何这样做呢?

3 个答案:

答案 0 :(得分:4)

您可以在ViewModel上创建一个为您执行此逻辑的属性。如

public string StatusDescription { 
    get { 
        switch (this.Status) {
            case 0: 
                return "Requested";
            case 1:
                return "In Progress";
            // yada yada yada
        }
    }
}

在您看来,用

替换switch语句
Html.DisplayFor(modelItem => item.StatusDescription);

答案 1 :(得分:1)

我会创建一个声明性帮助方法(http://weblogs.asp.net/mikaelsoderstrom/archive/2010/10/06/declarative-helpers-in-razor.aspx),根据状态显示文本。 然后,您可以在视图中将其命名为:

@Html.MyHelper(status)

甚至更好,就像原帖上的评论者所说,你可以在你的ViewModel上创建一个属性来执行此操作。

答案 2 :(得分:0)

我将其作为模型上的StatusText属性公开。

这种逻辑应该与你的UI分开。