#asp.net-mvc #image #button #gallery
#asp.net-mvc #изображение #кнопка #Галерея
Вопрос:
В моем приложении mvc у меня следующий вид
@model ProjectExplorer.Web.ViewModels.ProjectDetailViewModel
@{
}
<section id="imagery">
<h3>Project Imagery</h3>
@if (@Model.OpenAssetImagesVm.OpenAssetImages.Any())
{
<a href="@Model.OpenAssetImagesVm.OpenAssetProjectURL" target="_blank">Click here to find, share and download more digital assets</a>
}
<!-- The Bootstrap Image Gallery lightbox, should be a child element of the document body -->
<div id="blueimp-gallery" class="blueimp-gallery blueimp-gallery-controls">
<!-- The container for the modal slides -->
<div class="slides"></div>
<!-- The modal dialog, which will be used to wrap the lightbox content -->
<div class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" aria-hidden="true">amp;times;</button>
<h4 class="modal-title"></h4>
</div>
<div class="modal-body next" style="max-height: 500px; min-height: 400px;"></div>
<div class="modal-footer">
<button type="button" class="btn btn-default pull-left prev">
<i class="glyphicon glyphicon-chevron-left"></i>
Previous
</button>
<button type="button" class="btn btn-primary" onclick="location.href = '@Model.OpenAssetImagesVm.OpenAssetProjectURL';">
Info
<i class="glyphicon glyphicon-download-alt"></i>
</button>
<button type="button" class="btn btn-primary next">
Next
<i class="glyphicon glyphicon-chevron-right"></i>
</button>
</div>
</div>
</div>
</div>
</div>
@if (Model.OpenAssetImagesVm.OpenAssetImages.Any())
{
<div style="margin-top: 17px;">
<div id="links">
@foreach (var item in Model.OpenAssetImagesVm.OpenAssetImages)
{
<a href="@item.URL" title="@item.FileName" data-gallery>
<img src="@item.Thumbnail" alt="@item.FileName" class="img-thumbnail" style="margin-bottom:7px;" />
</a>
}
</div>
</div>
}
else
{
<p>There are no images assigned to this project in OpenAsset.</p>
}
<div>
@{
var grid = new WebGrid(
canPage: false,
canSort: false,
ajaxUpdateContainerId: "grid");
grid.Bind(Model.OpenAssetImagesVm.OpenAssetImages, autoSortAndPage: false);
@grid.GetHtml(htmlAttributes: new { id = "grid" },
fillEmptyRows: false,
mode: WebGridPagerModes.All,
columns: grid.Columns());
}
</div>
</section>
Я хочу, чтобы строка ниже указывала на поле в моей модели.Откройте assetimagesvm.OpenAssetImages использует класс с именем InfoURL вместо OpenAssetProjectURL.
<button type="button" class="btn btn-primary" onclick="location.href = '@Model.OpenAssetImagesVm.OpenAssetProjectURL';">
Я не уверен, как динамически задавать URL-адрес, на который указывает кнопка, на основе значения из цикла foreach.
У меня есть галерея изображений (см. Ссылку Ниже), в которой я хочу, чтобы кнопка Info указывала на ссылку, основанную на отображаемом изображении, вместо общей ссылки, как у меня в приведенном выше коде просмотра. Изображение галереи изображений и кнопки, которые я пытаюсь установить, если это поможет, я использую галерею blueimp.
Любая помощь приветствуется.
Редактировать: надеюсь, дополнительная информация поможет. Когда страница открывается, она загружает все изображения на страницу в веб-сетку. Когда пользователь щелкает по изображению, открывается модальное окно, и пользователь может щелкнуть по изображениям. У меня есть кнопка info, которая будет ссылаться на другую страницу, уникальную для каждого изображения.
Основываясь на предложениях Джеймса, это текущее представление. Я также добавил визуальный вывод ссылок, которые я хочу использовать, и текущее значение i. В настоящее время вывод в цикле foreach корректен, но при открытии модального он по-прежнему получает только первую информацию.
@model ProjectExplorer.Web.ViewModels.ProjectDetailViewModel
@{
int i = 0;
}
<section id="imagery">
<h3>Project Imagery</h3>
@if (@Model.OpenAssetImagesVm.OpenAssetImages.Any())
{
<a href="@Model.OpenAssetImagesVm.OpenAssetProjectURL" target="_blank">Click here to find, share and download more digital assets</a>
}
<!-- The Bootstrap Image Gallery lightbox, should be a child element of the document body -->
<div id="blueimp-gallery" class="blueimp-gallery blueimp-gallery-controls">
<!-- The container for the modal slides -->
<div class="slides"></div>
<!-- The modal dialog, which will be used to wrap the lightbox content -->
<div class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" aria-hidden="true">amp;times;</button>
<h4 class="modal-title"></h4>
</div>
<div class="modal-body next" style="max-height: 500px; min-height: 400px;"></div>
<div class="modal-footer">
<button type="button" class="btn btn-default pull-left prev">
<i class="glyphicon glyphicon-chevron-left"></i>
Previous
</button>
<button type="button" class="btn btn-primary" onclick="location.href = '@Model.OpenAssetImagesVm.OpenAssetImages[i].InfoURL'";>
Info
<i class="glyphicon glyphicon-download-alt"></i>
</button>
<button type="button" class="btn btn-primary next">
Next
<i class="glyphicon glyphicon-chevron-right"></i>
</button>
</div>
</div>
</div>
</div>
</div>
@if (Model.OpenAssetImagesVm.OpenAssetImages.Any())
{
<div style="margin-top: 17px;">
<div id="links">
@foreach (var item in Model.OpenAssetImagesVm.OpenAssetImages)
{
<a href="@item.URL" title="@item.FileName" data-gallery>
<img src="@item.Thumbnail" alt="@item.FileName" class="img-thumbnail" style="margin-bottom:7px;" />
</a>
<p>@item.InfoURL</p>
<p>@i </p>
i ;
}
</div>
</div>
}
else
{
<p>There are no images assigned to this project in OpenAsset.</p>
}
<div>
@{
var grid = new WebGrid(
canPage: false,
canSort: false,
ajaxUpdateContainerId: "grid");
grid.Bind(Model.OpenAssetImagesVm.OpenAssetImages, autoSortAndPage: false);
@grid.GetHtml(htmlAttributes: new { id = "grid" },
fillEmptyRows: false,
mode: WebGridPagerModes.All,
columns: grid.Columns());
}
</div>
</section>
Комментарии:
1. Пожалуйста, обратите внимание, что тег model-view-controller предназначен для вопросов о шаблоне. Для реализации ASP.NET-MVC существует специальный тег.
2. @Courtney Ammons — является
InfoURL
ли значение одинаковым для значения для каждого элементаModel.OpenAssetImagesVm.OpenAssetImages
и каков его тип? Если это то же самое, вы можете использовать индекс — напримерlocation.href = '@Model.OpenAssetImagesVm.OpenAssetImages[0].InfoURL'
3. Или вы могли бы использовать для изменения текущего
ViewBag
InfoURL
4. @JamesP Я смог использовать предложенный вами вариант индексации. Отлично сработало! Чтобы ответить на заданные вами вопросы, InfoURL — это поле, используемое во всех изображениях, и представляет собой строковое значение. Я использовал точный фрагмент кода, который вы предоставили, и это сработало как шарм. Я не уверен, как пометить комментарии в качестве ответа, чтобы предоставить вам оценку за ответ.
5. @JamesP Я только что заметил, что он ищет только первое изображение в списке. Когда я выбираю другое изображение, оно по-прежнему использует информацию первого изображения. Как мне заставить его подбирать различную информацию для каждого изображения?
Ответ №1:
Как указано выше, использование @Model.OpenAssetImagesVm.OpenAssetImages[0].InfoURL
будет привязываться только к первому элементу в коллекции — элементу в позиции 0.
Таким образом, вы можете объявить переменную в своем представлении @{ int i = 0; }
Затем используйте это для доступа к требуемому индексу:
@Model.OpenAssetImagesVm.OpenAssetImages[i].InfoURL
Затем увеличивайте его по мере выполнения цикла:
@foreach (var item in Model.OpenAssetImagesVm.OpenAssetImages)
{
<a href="@item.URL" title="@item.FileName" data-gallery>
<img src="@item.Thumbnail" alt="@item.FileName" class="img-thumbnail" style="margin-bottom:7px;" />
</a>
@i ;
}
Затем это будет соответствовать нужному вам индексу, например, 0 для первого элемента, 1 для второго и т.д.
Надеюсь, это имеет смысл? Если нет, завтра объясню подробнее. Теперь время истекло.
Комментарии:
1. Возможно, у меня было больше разъяснений. Я внес изменения, которые вы отметили выше, и они по-прежнему всегда указывают на ссылку с первого изображения. Я добавил визуальный вывод для текущей ссылки и вывод i на экран, и, похоже, все работает, но i, что модальное резервное копирование, похоже, всегда было инициализацией i 0. Не похоже, что когда я нажимаю, чтобы вызвать модальное, новое значение i равноподобрал
2. Я не совсем понимаю, как заполняется модальный?