[英]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.