РЕДАКТИРОВАТЬ: Проблема решена!У меня не было данных в моей базе данных, поэтому в цикле foreach не было элементов модели для итерации.После заполнения базы данных HTML в цикле foreach корректно отображается в представлении.
В настоящее время у меня болит мозг из-за этой проблемы, из-за которой мой частичный вид не отображается в моем Home / IndexПосмотреть.
Я пытаюсь использовать помощник Html.Action()
для вызова моего действия PhotoGallery в моем контроллере Photos для того, чтобы динамически заполнять и возвращать частичный вид _PhotoGallery.cshtml.
Вот мое действие PhotoGallery вКонтроллер моих фотографий:
[ChildActionOnly] //This attribute means the action cannot be accessed from the brower's address bar
public ActionResult PhotoGallery(int num = 0)
{
//In the view, display the latest photos when num is greater than 0
//Otherwise, display all photos
List<Photo> photos;
if (num == 0)
{
photos = db.Photos.ToList();
}
else
{
photos = db.Photos
.OrderByDescending(p => p.createdDate)
.Take(num).ToList();
}
return PartialView("~/Views/Shared/_PhotoGallery.cshtml", photos);
}
Просмотров / Home / Index.cshtml:
@{
ViewBag.Title = "Welcome to PhotoSocial";
}
<p class="lead">Create an account to instantly share your favourite moments with everyone.</p>
<h2>Latest Photos:</h2>
@Html.Action("PhotoGallery", "Photos", new { num = 3 })
Просмотры / Shared / _PhotoGallery.cshtml:
@model IEnumerable<SocialNetwork.Models.Photo>
@{
Layout = null;
}
@foreach (var item in Model)
{
<div class="" id="photo-gallery">
<h3>
@Html.DisplayFor(modelItem => item.title)
</h3>
@if (item.photoFile != null)
{
<div class="photo-display">
<img class="" src="@Url.Action("GetImage", "Photo", new { photoId = item.photoId})" />
</div>
}
<div class="" id="photo-data">
<div>
<div class="" id="display-label">
<p>Uploaded by:</p>
</div>
<div class="display-field">
@Html.DisplayFor(modelItem => item.username)
</div>
</div>
<div>
<div class="" id="display-label">
@Html.DisplayNameFor(model => model.createdDate):
</div>
<div class="display-field">
@Html.DisplayFor(modelItem => item.createdDate)
</div>
</div>
<div>
<div class="" id="display-label">
@Html.DisplayNameFor(model => model.modifiedDate):
</div>
<div class="display-field">
@Html.DisplayFor(modelItem => item.modifiedDate)
</div>
</div>
</div>
@Html.ActionLink("Details", "Details", new { id = item.photoId }) |
@Html.ActionLink("Delete", "Delete", new { id = item.photoId })
</div>
}
ВотИсходный код HTML, который отображается при загрузке Home / Index:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome to PhotoSocial</title>
<link href="/Content/bootstrap.css" rel="stylesheet"/>
<link href="/Content/site.css" rel="stylesheet"/>
<script src="/Scripts/modernizr-2.8.3.js"></script>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">PhotoSocial</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a href="/">Home</a></li>
<li><a href="/Home/About">About</a></li>
<li><a href="/Home/Contact">Contact</a></li>
<ul class="nav navbar-nav navbar-right">
<li><a href="/Account/Login">Login</a></li>
<li><a href="/Account/Register">Register</a></li>
</ul>
</ul>
</div>
</div>
</div>
<div class="container body-content">
<p class="lead">Create an account to instantly share your favourite moments with everyone.</p>
<h2>Latest Photos:</h2>
<hr />
<footer>
<p>© 2019 - Thomas Dam</p>
</footer>
</div>
<script src="/Scripts/jquery-3.3.1.js"></script>
<script src="/Scripts/bootstrap.js"></script>
</body>
</html>
Как вы можете видеть в окончательном выводе, мои представления Home / Index.cshtml и _Layout правильно отрисованы, однако мое частичное представление _PhotoGallery имеетне было оказано.
Я пробовал Html.RenderAction()
, но мне нужна модель для сопоставления фотографии с видом.Я также попытался Html.RenderPartial()
, но мне нужно вернуть объект Model.Однако я заметил одну вещь: когда я помещаю HTML-код вне цикла @foreach
, он появляется у меня на виду!
Что я делаю неправильно?Спасибо, ребята.