我有一个foreach循环,该循环从数据库中循环遍历我的文档,它仅拉入IMAGES,然后我的页面上每行有4张图像,我想单击其中的一个,打开带有图像的模态,然后单击另一个又是一样。所以我有这个设置:
@foreach (var item in Model.DocumentList)
{
// Below I am currently using just a ID for modal (which i know is wrong)
<div class="col-lg-3 col-md-4 col-xs-6 thumb">
<a class="thumbnail" data-toggle="modal)" data-target="#myModal" title="@item.FileDescription">
@Html.DocumentUrl(item.FileUrl, false)
</a>
<span class="col-xs-12" style="text-align:center;">@item.CreatedDate.ToShortDateString()</span>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Uploaded - @item.CreatedDate.ToShortDateString()</h4>
</div>
<div class="modal-body">
@Html.DocumentUrl(item.FileUrl, true)
<div class="row">
<div class="col-md-12">
<p>
@item.FileDescription
</p>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn banner-background white-text">Download</button>
</div>
</div>
</div>
</div>
}
我可以看到为什么数据目标标识模式不起作用,当我将其悬停时,会看到不同的标题,但是即使单击img 4,单击img也会显示第一个img,第一个标题等。我该如何做才能使其与每个项目正确配合?将id模态更改为类也无济于事。
在您的特定解决方案中,您对Model.DocumentList中的每个项目使用相同的模式片段。例如:
<a class="thumbnail" data-toggle="modal)" data-target="#myModal" title="@item.FileDescription"> @Html.DocumentUrl(item.FileUrl, false)</a>
[如果始终切换ID为myModal的模态。每当您单击DocumentUrl时,页面呈现的第一个模态即胜出。实际上,您正在创建4个相同的模态,唯一的区别是Url和Item,因此,您遇到的是奇怪的行为。
要完成您要完成的任务(至少以解决问题的方式),您可以通过将ID与项目的值串联起来,在每个模式上利用唯一ID。例如:
<a class="thumbnail" data-toggle="modal)" data-target="#myModal-@(item.id)" title="@item.FileDescription"> @Html.DocumentUrl(item.FileUrl, false)</a>
<div class="modal fade" id="myModal-@(item.id)" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"><!-- modal body etc --></div>
通过使用Model的id,您将为Model.Document列表中的每个项目生成一个唯一的HTML模式,并生成一个要匹配的唯一数据目标。这将通过使用4个单独的模态来完成您要尝试的操作。
如果您想稍后重构,则有一个小的替代建议。您始终可以在页面上加载单个模式,然后使用JavaScript修改模式的主体。这将通过仅使用单个模式片段而不是4个单独的模式片段来清理HTML。例如,您将在页面中加载一个空的模态,然后使用该循环生成具有适当数据变量的链接。这样,您的代码是DRY,HTML是干净的。
快乐编码!
实际上很简单。感谢您的解释。我已经做了两个小时。 :)