Asp.net mvc ASP.NET MVC编辑模板和部分视图与ajax不同步

Asp.net mvc ASP.NET MVC编辑模板和部分视图与ajax不同步,asp.net-mvc,model-view-controller,.net-4.5,Asp.net Mvc,Model View Controller,.net 4.5,这让我困惑了好几天。我花了一段时间才找到发生这种不同步的地方 我使用jquery可排序拖放来确定一些图像的顺序。我对排序表的停止(拖动)的覆盖我循环并为隐藏值指定序号以提交值: $.each(parent.children(), function (i, v) { var newOrdinal = $(v).index(); $(v).find('.product-img-ordinal').val(newOrdinal);//hidden value }); submitCha

这让我困惑了好几天。我花了一段时间才找到发生这种不同步的地方

我使用jquery可排序拖放来确定一些图像的顺序。我对排序表的停止(拖动)的覆盖我循环并为隐藏值指定序号以提交值:

$.each(parent.children(), function (i, v) {
    var newOrdinal = $(v).index();
    $(v).find('.product-img-ordinal').val(newOrdinal);//hidden value
});
submitChagnes();
接下来,我的控制器:

public async Task<ActionResult> EditDetails(IEnumerable<ProductImage> images, Guid? productId)
{
    //save to database
    //get sorted list of images
    return PartialView("_ProductImagesList", sortedImages);
}
最后是部分:

<div class="img-container pull-left">
    <div>
        <img class="product-img" width="240" height="336" src='@Url.Content(string.Format("~/PathToMyImages/GetImage?size=240x337&id={0}", Model.Id))' title="@Model.Description" />
    </div>
    <div class="img-descr">
        <div class="img-descr1">@Model.Description</div>
        <div class="img-descr2">Test Desc2</div>
    </div>
</div>
@Html.HiddenFor(model=>model.Description, new { @class = "product-img-desc" })

@型号.说明
测试说明2
@Html.HiddenFor(model=>model.Description,新的{@class=“product img desc”})
其中的一些可能看起来像是斩波,但这是因为试图找出问题所在。但实际情况是@Html.Partial(“_ProductImage”,Model)中的Id值不正确,@Html.HiddenFor(Model=>Model.Id,new{@class=“product img Id”})中的src值不正确(应该是图像的Id)。我不明白为什么会有两个不同的模型在这些,即使他们都通过相同的模型。我甚至可以在它们上面设置断点,并在循环的同一次迭代中看到它们是两个不同的值。因此,我将以一个div结束,其中包含一个带有一个id的img src和一个带有另一个id的id的隐藏字段。第一次总是正确的,然后所有后续的帖子都不同步,就像第一个ajax调用之后的事情一样。即使查看返回的网络流量,您也可以看到信息混淆:

简化了从partials/ajax返回:

<div>
    <img src='1234.jpg'> <!-- Wrong, should match Id below -->
    <input type='hidden' name='[0].Id' value='abcd' /> <!-- src should have this name -->
</div>
<div>
    <img src='abcd.jpg'> <!-- Wrong, should match Id below -->
    <input type='hidden' name='[1].Id' value='1234' />
</div>

其中src文件名应与Id值匹配。这几乎就像服务器端缓存的东西,或者我不理解的事情。 DisplayTemplate在隐藏字段中有正确的信息,Partial有错误的信息,这很奇怪,foreach循环甚至还没有到达该项,它正在Partial中获取它的id

还有一条信息,如果我注释掉submit并让jquery sortable在面板上移动,所有内容都正确地保持在一起,实际上在ajax调用过程中,DisplayTemplate和部分视图迭代会以某种方式混淆在一起

我可以看到该值作为某个Id(GUID)进入,并且在部分中是一个值,在DisplayTemplate中是另一个值

有什么想法吗


谢谢

您在提交时没有提供足够的详细信息,但我怀疑您在发布后解释了您的问题。发布后,我确实尝试了ModelState.Clear(),在调用我的PartialView之前,它确实修复了它,您是否可以发布作为答案,以便我可以将其标记为正确。
<div class="img-container pull-left">
    <div>
        <img class="product-img" width="240" height="336" src='@Url.Content(string.Format("~/PathToMyImages/GetImage?size=240x337&id={0}", Model.Id))' title="@Model.Description" />
    </div>
    <div class="img-descr">
        <div class="img-descr1">@Model.Description</div>
        <div class="img-descr2">Test Desc2</div>
    </div>
</div>
@Html.HiddenFor(model=>model.Description, new { @class = "product-img-desc" })
<div>
    <img src='1234.jpg'> <!-- Wrong, should match Id below -->
    <input type='hidden' name='[0].Id' value='abcd' /> <!-- src should have this name -->
</div>
<div>
    <img src='abcd.jpg'> <!-- Wrong, should match Id below -->
    <input type='hidden' name='[1].Id' value='1234' />
</div>