在视图和控制器之间转换值

时间:2014-02-24 09:16:54

标签: c# asp.net-mvc razor model-view-controller

如果控制器和视图之间的值不相互匹配,建议的方法是什么?

// Basic model with enum property
public class MyModel {
    public State MyState { get; set; }
}

// Enum denoting 3 states
public enum State {
    Ready,
    Set,
    Go
}

// API/MVC/Module/SignalR controller
public class MyController : MiddlewareController {
    public MyController() {
        Get = _ => {
            return View["myView", new MyModel()];
        };
    }
}

// myView
<div class="@Model.State"></div>

现在,枚举值的字符串表示形式为“Ready”,“Set”和“Go”,但在我看来,我需要“.red”,“。yellow”,“。green”。

当然,在我的控制器中,我可以创建一个返回相应CSS值的函数,但这感觉错了,因为我将视图关注泄漏到我的控制器中。有没有类似价值转换器的东西?

2 个答案:

答案 0 :(得分:1)

如果您不能像我建议的那样使用css,我认为键值字典是要走的路。特别是这是一个网站问题。

public static Dictionary<State, string> StatusClassName = new Dictionary<State, string>();
StatusClassName.Add(State.Ready, "red");
...
之后,您可以按照您想要的方式使用;

StatusClassName[Model.State]

或者你可以编写一个扩展方法来使用

Model.State.GetClassName();

答案 1 :(得分:0)

您可以在视图中对其进行转换:

@{
   string className = string.Empty;
   switch (Model.State)
   {
       case State.Ready:className = "red"; break;
       case State.Set:className = "green"; break;
       case State.Go: className = "yellow"; break;
   }
}

<div class="@className"></div>