[英]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
將處理您的AuthorStatusLabelClass
在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####
帶有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.