【问题标题】:How to use ViewBag as list in MVC3如何在 MVC3 中使用 ViewBag 作为列表
【发布时间】:2012-05-23 13:32:08
【问题描述】:

我需要使用 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

然后在视图中我像这样使用它:

 @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 作为列表。我无法在其中运行另一个列表。请告诉我应该怎么做。

【问题讨论】:

    标签: asp.net-mvc-3 viewbag


    【解决方案1】:

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

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

    现在您可以将List&lt;Thumbnail&gt; 添加到ViewBag

    但我建议只使用包含List&lt;Thumbnail&gt; 属性的相关模型创建一个强类型视图。

    【讨论】:

    • @Eben Roux 嘿thanx 4 答案,我知道这会起作用......但问题是文件路径不是任何类的成员。而 FirstName 确实属于一个类。因此暂时我想要有一种方法,我可以将这两个都添加到 viewbag 中,然后使用它。除了制作课程之外,没有其他方法吗?
    • @user1274646:如果文件和 FirstName 之间存在一对一的映射,那么使用包含所有信息的 ThumbnailModel 类和一个要遍历的集合是最简单的。您可以使用两个数组并在其中一个数组上使用普通的 for 循环并通过索引访问另一个数组,但这比我想象的要付出更多的努力。
    【解决方案2】:

    用户1274646,

    您最好的选择是创建一个公共类,其中包含现有的缩略图元素和附加的 FirstName 属性。这可能是这样的:

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

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

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

    【讨论】:

    • 嘿thanx 4 这么好的答案,我知道这会起作用......但问题是文件路径不是任何类的成员。而名字确实属于一个类。因此暂时我想要有一种方法,我可以将这两个都添加到 viewbag 中,然后使用它。除了制作课程之外,没有其他方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多