2016-03-19 10 views
1

は、いくつかの他のプロパティと一緒に、私はこれ持っている:私は私のコントローラでAuthorStatusLabelClassにアクセスするにはどうすればよいMVC5:反復ViewModelに私のviewmodelで

public int AuthorStatus {get; set;} 

public string AuthorStatusLabelClass 
{ 
    get 
    { 
     switch (AuthorStatus) 
     { 
      case 1: 
       return "label-success"; 
      case 0: 
       return "label-danger"; 
      case 2: 
       return "label-warning"; 
      default: 
       return "label-default"; 
     } 
    } 
    set 
    { 

    } 
} 

public IQueryable<VM_Authors> AuthorList { get; set; } 

を。

var vm = new ViewModels.VM_Authors(); 
    vm.Categories = new SelectList(db.AuthorCategories, "CategoryID", "CategoryName"); 
    vm.AuthorList = (from a in db.Authors 
        select new ViewModels.VM_Authors 
        { 
         FirstName = a.FirstName, 
         LastName = a.LastName, 
         Email = a.Email, 
         AuthorStatusLabelClass = ####HOW_SHOULD_I_RETRIEVE_IT_HERE#### 

私はこのような私の見解でそれを使用できるように:

 @foreach (var item in Model.AuthorList) 
     { 
     <tr> 
      <td><span class="label @item.AuthorStatusLabelClass">@item.AuthorStatus</span></td> 
      <td><img src="" class="img-circle" /></td> 
      <td><span class="text-semibold">@item.FirstName @item.LastName</span></td> 
      <td>@item.SelectedCategoryID</td> 
      <td></td> 
     </tr> 
     } 

は私の全体的なアプローチが異なっていることができますか?どんな助けもありがとう!

答えて

1

編集:あなたはAuthorStatusLabelClassが、それは完全にあなたのAuthorStatus、そしてあなたがでそれを割り当てること必要はありませんに依存して、データベースのテーブルの列の一つではないことを言及ので

すべて。単純に実行します。

select new ViewModels.VM_Authors 
{ 
    FirstName = a.FirstName, 
    LastName = a.LastName, 
    Email = a.Email, 
    AuthorStatus = a.AuthorStatus //assign this 

そして、あなたはあなたのViewであなたのAuthorStatusLabelClassを得るとき、ちょうどそれを直接取得し、上記AuthorStatusを割り当てるには、ViewであなたのAuthorStatusLabelClassのリターンの世話をします。

オリジナル:setter

select new ViewModels.VM_Authors 
{ 
    FirstName = a.FirstName, 
    LastName = a.LastName, 
    Email = a.Email, 
    AuthorStatusLabelClass = //This is a set ####HOW_SHOULD_I_RETRIEVE_IT_HERE#### 

AuthorStatusLabelClassは次のようになります:

private string _authorStatusLabelClass = ""; 
public string AuthorStatusLabelClass 
{ 
    get 
    { 
     switch (AuthorStatus) 
     { 
      case 1: 
       _authorStatusLabelClass = "label-success"; 
      case 0: 
       _authorStatusLabelClass = "label-danger"; 
      case 2: 
       _authorStatusLabelClass = "label-warning"; 
      default: 
       _authorStatusLabelClass = "label-default"; 
     } 
     return _authorStatusLabelClass; 
    } 
    set 
    { 
     _authorStatusLabelClass = value; 
    } 
} 

あなたは、このようにあなたがこれを行うことはできません、あなたのAuthorStatusLabelClasssetterを設定していないようです

また、あなたがAuthorStatusLabelClassを取得する前にを番号に設定すると、実際にAuthorStatusLabelClassを正しく取得することはできません。AuthorStatus。あなたはおそらくクラスAuthorStatusLabelClassに必要なのindexerです:

public AuthorStatusLabelClass this[int index] { //thus you could give index as an input for this instance 
    get { 
    switch (index) 
    { 
     case 1: 
      return "label-success"; 
     case 0: 
      return "label-danger"; 
     case 2: 
      return "label-warning"; 
     default: 
      return "label-default"; 
    } 
    }  
} 

そして、このようにそれを使用します。一部の人々はこのことを示唆したので、うーん、私はViewModelにににそれにしようとしていた全体の目的がある

vm.AuthorList = (from a in db.Authors 
       select new ViewModels.VM_Authors 
       { 
        FirstName = a.FirstName, 
        LastName = a.LastName, 
        Email = a.Email, 
        AuthorStatusLabelClass = a.AuthorStatusLabelClass[a.AuthorStatus] 
+0

はDBを指しています。私はそれをa.AuthorStatusLabelClassとして参照することはできません.dbにAuthorStatusLabelClassという列がありません。 –

+0

@KemalEmin私は、DBでlabelclassを生成するために何を持っていますか? 'a.AuthorStatus'だけ? – Ian

+0

はい、AuthorStatusは0,1,2のいずれかです。したがって、varcharデータ型を持つ点はありません。 –

0

わかりましたように、AuthorStatusLabelClassにはゲッターと空のセッターがあります。 GetterはAuthorStatusプロパティに依存します。 AuthorStatusプロパティを正しく設定するだけです。

select new ViewModels.VM_Authors 
{ 
    FirstName = a.FirstName, 
    LastName = a.LastName, 
    Email = a.Email, 
    AuthorStatus = ### SETUP status and don't worry about AuthorStatusLabelClass ### 
+0

ViewModel自体にロジックのタイプを実装し、Viewを可能な限り「薄い」ものにする必要があります。 –

+0

@ケマル・エミン、多分彼らは正しい。 viewModelは、ビュー関連のロジックを処理する必要があります。私はその提案を削除します。 –