在MVC 4视图中查询ViewData
本文关键字:查询 ViewData 视图 MVC | 更新日期: 2023-09-27 18:14:59
问题是我从数据库返回一个照片记录,这在我的详细信息视图中工作得很好。然而,在细节下的控制器中,我还编译了一个列表对象,我希望在细节视图中显示它,因为它包含关联的其他照片。视图底部应该列出每个被引用的照片名称。我在使用Galleria。我想把这个插入到照片查看器中
当我尝试遍历列表中的每个项目时,我得到:
{"Object reference not set to an instance of an object."}
PhotosController
public ActionResult Details(int id = 0)
{
Photos photos = db.FindPhotoById(id);
if (photos == null)
{
return HttpNotFound();
}
List<Photos> photoList = GetImagesFromFilmID(8);
ViewData["NumberOfImages"] = photoList.Count().ToString();
ViewData["PhotoList"] = photoList;
return View(photos);
}
public List<Photos> GetImagesFromFilmID(int filmID = 8 )
{
List<Photos> photos;
photos = (from p in db.Photos
where p.PhotoDescription == "8"
select p).Take(filmID).ToList();
return photos;
}
详细信息视图
@model TestingMVCQA.Models.Photos
@*@model IEnumerable<TestingMVCQA.Models.Photos>*@
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<fieldset>
<legend>Photos</legend>
<div class="display-label">
@Html.DisplayNameFor(model => model.PhotoName)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.PhotoName)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.PhotoDescription)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.PhotoDescription)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.PhotoFileName)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.PhotoFileName)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.ImageMimeType)
</div>
<div class="display-field">
@Html.DisplayFor(model => model.ImageMimeType)
</div>
<script src="@Url.Content("~/Scripts/jquery-1.7.1.js")"></script>
<script src="@Url.Content("~/Scripts/galleria-1.3.6.js")"></script>
<style>
.galleria{ width: 900px; height: 500px; background: #000 }
</style>
@if (Model.PhotoFile != null) {
<div class="galleria">
<img src="@Url.Action("GetImage", "Photos", new { id = Model.PhotoID })" data-title="My title" data-description="My description" />
<img src="@Url.Action("GetImage", "Photos", new { id = 5 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 6 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 7 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 8 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 9 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 10 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 11 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 12 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 13 })" />
<img src="@Url.Action("GetImage", "Photos", new { id = 14 })" />
</div>
}
<script>
Galleria.loadTheme(src = "@Url.Content("~/Scripts/galleria.classic.js")");
Galleria.run('.galleria');
</script>
</fieldset>
<p>Your favorite fruit is:</p>@ViewData["NumberOfImages"]
<p>
@foreach (var item in ViewData["NumberOfImages"] as IEnumerable<TestingMVCQA.Models.Photos>)
{
}
</p>
<p>
@Html.ActionLink("Edit", "Edit", new { id=Model.PhotoID }) |
@Html.ActionLink("Back to List", "Index")
</p>
在索引视图中我有:
@model IEnumerable<TestingMVCQA.Models.Photos>
这允许我使用foreach
,我理解为什么,但当我在细节视图中返回单个对象时,我有点困在如何解决这个问题上。所以当它全部工作时,我可以在图像本身上替换GetImage
调用和foreach
。
如果你需要任何额外的代码或解释,请告诉我。
您在foreach循环中使用ViewData["NumberOfImages"]
是错误的。
foreach循环应该是这样的:-
@foreach (var item in ViewData["PhotoList"] as IEnumerable<TestingMVCQA.Models.Photos>)
{
//@item.FileName //instead .FileName use property which you have used in your model class
}