我有以下内容:
_ImageGallery部分
@if (Model != null)
{
foreach (var item in Model)
{
@Html.Partial("_ImageItem", item);
}
}
_ImageItemPartial
@model WebsiteEngine.Models.PortfolioImage
@{
string url = VirtualPathUtility.ToAbsolute(String.Format("~/{0}", Html.DisplayFor(m => m.FileName)));
}
@using (Html.BeginForm("DeleteImage", "Portfolio", FormMethod.Post, new { @class = "deleteImageForm" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true);
@Html.HiddenFor(m => m.Name)
@Html.HiddenFor(m => m.FileName)
@Html.HiddenFor(m => m.Order)
@Html.HiddenFor(m => m.PortfolioID)
@Html.HiddenFor(m => m.PortfolioImageID)
<div class="span3">
<div class="item">
<a class="fancybox-button" data-rel="fancybox-button" title="Photo" href="@url">
<div class="zoom">
<img src="@url" alt="Photo" />
<div class="zoom-icon"></div>
</div>
</a>
<div class="details">
<a href="#" class="icon deleteImage" data-form=""><i class="icon-remove"></i></a>
</div>
</div>
</div>
}
当我使用 Chrome 开发工具检查页面元素时,第一个元素缺少周围的表单。如果我检查页面源(使用右键)单击,那么表单就在那里。这让我相信一些 JS 正在删除表单,所以我禁用了 JS,但它仍然丢失。
如果更改_ImageGalleryPartial则如下所示(注意添加了一个空模型):
@if (Model != null)
{
@Html.Partial("_ImageItem", new WebsiteEngine.Models.PortfolioImage());
foreach (var item in Model)
{
@Html.Partial("_ImageItem", item);
}
}
然后所有“正确”的元素都会得到一个表单,但同样,第一项没有。
我仍然倾向于认为这是一个 JS 问题,但我有点难过,因为禁用 JS 并不能解决它。这是 MVC 的一些异常行为吗?
请注意,我已经简化了上面的布局,我确实有一个或 2 个嵌套表单,但假设没关系,因为其他一切都很好,只是第一个部分被破坏了。
有任何想法吗?