Как установить значение Viewbag в Razor с помощью foreach? - PullRequest
0 голосов
/ 01 апреля 2020

Это мой код:

 var result = (from Photos in photos
                       join Projects in projects on Photos.ProjectID equals Projects.ProjectID
                       where
                         Projects.IsTopProject == true
                       select new
                       {
                           Projects.TaskMaster,
                           Projects.Location,
                           Photos.Photo1
                       }).ToList(); 
ViewBag.photos= result;

На странице Razor я хочу использовать foreach, например:

<div class="row">
                    @foreach (var photoItem in  ViewBag.photos)
                    {
                      <img class="img-responsive" src="~/@photoItem.??Photos.Photo1" />
                     <li>@photoItem.??Projects.Location</li>
                     <li>@photoItem.??Projects.TaskMaster</li>
                    }
</div>

Но я не могу присвоить свойству любого @photoItem .

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Проблема здесь

 select new
            {
              Projects.TaskMaster,
              Projects.Location,
              Photos.Photo1
             }).ToList(); 

Вы должны создать модель представления (скажем, PhotoViewModel ), затем создать новую PhotoViewModel

public class PhotoViewModel
{
    public int TaskMaster { get; set; }

    public string Location { get; set; }

    public string Photo1 { get; set; }
}

Затем в Controller, это должно быть так

var result = (from Photos in photos
                       join Projects in projects on Photos.ProjectID equals Projects.ProjectID
                       where
                         Projects.IsTopProject == true
                       select new PhotoViewModel
                       {
                           Projects.TaskMaster,
                           Projects.Location,
                           Photos.Photo1
                       }).ToList(); 
ViewBag.photos= result;

В представлении это должно быть

@foreach (var photoItem in (List<PhotoViewModel>)ViewBag.photos)
1 голос
/ 01 апреля 2020

Настоятельно рекомендуется использовать модель, но быстрое исправление - это распаковка значения viewbag в соответствующий тип:

// @foreach (var photoItem in  ViewBag.photos)


@foreach (var photoItem in  ViewBag.photos as List<PhotoViewModel>)

или другой способ приведения:

@foreach (var photoItem in  ( (List<PhotoViewModel>) ViewBag.photos)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...