ASP.NET MVC - Html.Action не отображает частичное представление - PullRequest
1 голос
/ 21 сентября 2019

РЕДАКТИРОВАТЬ: Проблема решена!У меня не было данных в моей базе данных, поэтому в цикле 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>&copy; 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, он появляется у меня на виду!

Что я делаю неправильно?Спасибо, ребята.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...