2014-02-24 59 views
0

如果控制器和視圖之間的值彼此不匹配,建議如何轉換值?在視圖和控制器之間轉換值

// 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> 

現在,枚舉值的字符串表示是「就緒」,「設置」和「去」,但在我看來,我需要「.red」,「.yellow」,「綠色」 。

當然,在我的控制器中,我可以創建一個函數來返回相應的CSS值,但這感覺是錯誤的,因爲我正在將視圖關注到我的控制器中。有沒有像價值轉換器那樣的東西?

+0

何不與我你只需要添加一個CSS選擇器,像.red,。就緒{背景色狀態:紅色; } –

+0

@OnurTOPAL 1)公約。我的枚舉值被稱爲「就緒」,CSS類將是「.ready」 - 不匹配。 2)「就緒」狀態僅爲應用程序所知,而不是視圖。 – Acrotygma

+0

創建HtmlHelper,您可以在其中實現您的功能。 – Ryba

回答

1

,如果你不能使用CSS,我建議我覺得鍵值字典是要走的路。特別是這是一個網站廣泛的問題。

public static Dictionary<State, string> StatusClassName = new Dictionary<State, string>(); 
StatusClassName.Add(State.Ready, "red"); 
... 

之後,你可以使用任何你想要的方式;

StatusClassName[Model.State] 

,或者你可以寫一個擴展方法使用像

Model.State.GetClassName(); 
+0

謝謝。我真的很喜歡你的方法。 – Acrotygma

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> 
相關問題