1

我有以下内容:

_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 个嵌套表单,但假设没关系,因为其他一切都很好,只是第一个部分被破坏了。

有任何想法吗?

4

1 回答 1

1

Html 表单不能嵌套。

Chrome 会忽略非法标签,因此它们不会显示。

您可以阅读这篇文章以获取更多信息。

于 2013-10-02T23:49:53.523 回答