如何使用 foreach 在 Razor 中设置 Viewbag 值?
How can i set Viewbag value in Razor by using foreach?
这是我的代码:
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
的 属性。
问题就在这里
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)
强烈建议使用模型,但快速解决方法是将 viewbag 值拆箱为其适当的类型:
// @foreach (var photoItem in ViewBag.photos)
@foreach (var photoItem in ViewBag.photos as List<PhotoViewModel>)
或其他投射方式:
@foreach (var photoItem in ( (List<PhotoViewModel>) ViewBag.photos)
这是我的代码:
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
的 属性。
问题就在这里
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)
强烈建议使用模型,但快速解决方法是将 viewbag 值拆箱为其适当的类型:
// @foreach (var photoItem in ViewBag.photos)
@foreach (var photoItem in ViewBag.photos as List<PhotoViewModel>)
或其他投射方式:
@foreach (var photoItem in ( (List<PhotoViewModel>) ViewBag.photos)