【问题标题】:How can i set Viewbag value in Razor by using foreach?如何使用 foreach 在 Razor 中设置 Viewbag 值?
【发布时间】:2020-04-01 00:26:57
【问题描述】:

这是我的代码:

 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 的属性。

【问题讨论】:

  • 如果您使用的是剃须刀页面,为什么要使用 ViewBag 而不是页面模型?

标签: c# asp.net-mvc linq asp.net-core razor-pages


【解决方案1】:

问题来了

 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)

【讨论】:

    【解决方案2】:

    强烈建议使用模型,但快速解决方法是将 viewbag 值拆箱为适当的类型:

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

    或其他投射方式:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2011-09-25
      • 2014-08-16
      • 1970-01-01
      • 2011-12-07
      相关资源
      最近更新 更多