如何在MVC3中使用ViewBag作为列表

时间:2012-05-23 13:32:09

标签: asp.net-mvc-3 viewbag

我需要使用ViewBag作为另一个ViewBag中的列表,我不明白我该怎么做 这是我的代码:

 List<string> srclist = new List<string>();
            foreach(var item in candidateportfolio)
            {
                if(item.PortfolioID!=0 && item.ChandidateID!=0)
                {
                    string filepath = Server.MapPath("~/ePortfolio/PortFolioContent/" + HobbyDetailID + "/Assignments/Exhb_" + item.PortfolioID + "_" + item.ChandidateID + ".jpg");
                    if (System.IO.File.Exists(filepath))
                    {
                        srclist.Add(filepath);
                    }
                }
            }
            ViewBag.Thumbnail = srclist;

candidateportfolio是CandidatePortfolio类的对象。

我获取类中的数据并检查其字段是否为空。然后我将文件路径添加到列表并将列表分配给Viewbag <登记/>

然后在View i中使用它如下:

 @foreach (var item in ViewBag.Thumbnail as List<string>)
{   
<img src="@item" title="Learner:@ViewBag.FirstName" width="150px" height="150px" border="5" style="align:right;margin:10px"/> 
}

现在问题是我也想把ViewBag.FirstName作为list.and我不能在这里运行另一个列表。请告诉我该怎么做。

2 个答案:

答案 0 :(得分:5)

如果你想要一个包含FirstName的列表和一张照片的路径,你可以创建一个新类:

public class ThumbnailModel
{
    public string FirstName { get; set; }
    public string PhotoPath { get; set; }
}

现在,您可以向List<Thumbnail>添加ViewBag

但我建议只使用包含List<Thumbnail>属性的relvant模型创建强类型视图。

答案 1 :(得分:1)

user1274646,

这里最好的选择是创建一个既包含现有缩略图元素又包含其他FirstName属性的公共类。以下是这可能的样子:

public class CandidateItem{
  public string FirstName {get; set;}
  public string Filepath {get; set;} 
}

然后,在你的循环中,创建一个新的CandidateItem并将其添加到列表(即List)。这是修改后的代码:

List<CandidateItem> srclist = new List<CandidateItem>();
foreach(var item in candidateportfolio)
{
    if(item.PortfolioID!=0 && item.ChandidateID!=0)
    {
        CandidateItem candItem = new CandidateItem();
        candItem.Filepath = Server.MapPath("~/ePortfolio/PortFolioContent/" + HobbyDetailID + "/Assignments/Exhb_" + item.PortfolioID + "_" + item.ChandidateID + ".jpg");
        candItem.FirstName = item.FirstName;
        if (System.IO.File.Exists(filepath))
        {
            srclist.Add(candItem);
        }
    }
}
ViewBag.Thumbnail = srclist;

然后在视图中使用它:

@foreach (var item in ViewBag.Thumbnail as List<CandidateItem>)
{   
    <img src="@item.Filepath" title="Learner:@item.FirstName" width="150px" height="150px"   border="5" style="align:right;margin:10px"/> 
}