2012-05-23 3 views
1

Мне нужно использовать ViewBag как список внутри другого ViewBag, и я не понимаю, как это сделать.
вот мой код:Как использовать ViewBag как список в MVC3

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.

я выборки данных в классе и проверить его поля не empty.Then я добавить FilePath в список и назначить список 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 как list.and я не могу запустить другой список в этом. Пожалуйста, скажите мне, как я должен это делать.

ответ

5

Если вы хотите получить список, содержащий как FirstName и путь, скажем, фото вы можете создать новый класс:

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

Теперь вы можете добавить List<Thumbnail> к ViewBag.

Но я бы предложил просто создать строго типизированный вид с моделью relvant, содержащей свойство List<Thumbnail>.

+0

+1 за ваше предложение. –

+0

@Eben Roux hey thanx 4 answer, и я знаю, что это сработает ... но проблема в том, что файл-путь не является членом какого-либо класса. В то время как FirstName принадлежит классу .hence, на время я хочу, чтобы у меня был способ, когда я может добавить и это в сумку просмотра, а затем использовать его. Нет ли другого способа, кроме создания класса? – user1274646

+0

@ user1274646: если между файлом и FirstName существует взаимно однозначное сопоставление, будет проще всего иметь класс ThumbnailModel, содержащий всю информацию, а затем коллекцию для итерации. Вы * можете * пойти, скажем, с двумя массивами и использовать обычный цикл для одного из массивов и получить доступ к другому по индексу, но это больше усилий, чем я думаю. –

1

user1274646,

вашего лучший выбор здесь, чтобы создать общественный класс, который содержит как элемент эскиза поддержки существующего плюс дополнительное 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"/> 
} 
+0

hey thanx 4 такой хороший ответ, и я знаю, что это сработает ... но проблема в том, что путь к файлу не является членом какого-либо класса. В то время как FirstName принадлежит классу.hence, на время я хочу, чтобы у меня был способ, когда я может добавить и это в сумку просмотра, а затем использовать его. Нет ли другого способа, кроме создания класса? – user1274646

Смежные вопросы