簡體   English   中英

MVC5:迭代 ViewModel

[英]MVC5: Iterate 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; }

如何訪問控制器中的 AuthorStatusLabelClass;

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

可能是我的整個方法不同嗎? 任何幫助,將不勝感激!

編輯:

由於您提到AuthorStatusLabelClass不是數據庫表的列之一並且它完全取決於您的AuthorStatus ,因此您根本不需要分配它。 簡單地做:

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

當您在View獲取AuthorStatusLabelClass時,只需直接獲取它,上面分配的AuthorStatus將處理您的AuthorStatusLabelClassView中的返回。

原來的:

您似乎沒有在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####

帶有setter 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;
    }
}

此外,由於你需要你的AuthorStatus設置為若干第一之前,你可以檢索你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";
    }
  }       
}

並像這樣使用它:

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]

正如我所看到的,你的AuthorStatusLabelClass有 getter 和一個空的 setter。 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 ###

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM