在动态地将项目添加到模型的集合时,在IE中使用$ .ajax进行发布

时间:2016-03-16 13:52:45

标签: jquery ajax asp.net-mvc internet-explorer

我希望我能恰当地说出这个问题。我正在审阅有关如何将项目动态添加到模型集合中并仍然保留绑定的各种文章。主要是我看着以下两个:

MVC系列第1部分:动态添加项目第1部分:
http://blogs.interknowlogy.com/2014/08/01/mvc-series-part-1-dynamically-adding-items-part-1/

模型绑定到列表:
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

在我的场景中,我有一个简单的类型按钮输入,它调用一个jQuery ajax调用一个返回WebBrowser的控制器动作,然后我简单地追加到我的DOM。在这个PartialView中,我调用了HtmlHelper扩展函数PartialView(基于第一篇文章中的演示),只需插入必要的隐藏字段并相应地更新HTML前缀。 Html.BeginCollectionItem cshtml文件如下所示:

PartialView

在Mozilla中,这很好用,我能够按预期动态地将项目添加到模型的集合中。虽然在Internet Explorer(IE)上我发现了一些奇怪的东西。

如果我通过以下jQuery函数进行ajax调用,IE将仅在第一次调用我的HtmlHelper扩展方法,之后它再也不会被调用:

@using Project.MyExtensions
@model Models.MyModel

<div class="item">
@using (Html.BeginCollectionItem("CollectionItem"))
{
    @Html.HiddenFor(model => model.ID)
    <div class="row">
        <div class="six columns">
            @Html.LabelFor(model => model.Name, "Name")
            @Html.TextBoxFor(model => model.Name, null, new {@class = "u-full-width"})
        </div>

        <div class="six columns">
            @Html.LabelFor(model => model.HostName, "Hostname")
            @Html.TextBoxFor(model => model.HostName, null, new {@class = "u-full-width"})
        </div>
    </div>

    <div>
        @Html.LabelFor(model => model.Description, "Description")
        @Html.TextAreaFor(model => model.Description, new {@class = "u-full-width"})
    </div>

    <div class="close">Remove</div>
}
</div>

虽然如果我使用$("#add-newItem").click(function() { $.ajax({ url: '@Url.Action("NewItem", "MyController")', dataType: 'html', type: 'GET', success: function(data) { $('#item-list').prepend(data); } }); }); 帮助函数,IE按预期工作,并且@Ajax.ActionLink中的HtmlHelper扩展方法似乎每次都按预期调用:

PartialView

在Mozilla中,两种方式都按预期工作,但在IE中我只能通过第二种方法看到预期的结果。有人可以解释一下这可能有什么不同吗?

更新:我注意到在IE中我能够一致地调用HtmlHelper扩展方法(通过$ .ajax方法),如果我有&#34; Inspect Element&#34;调试工具打开。

1 个答案:

答案 0 :(得分:1)

通过修改我的$ .ajax调用以指定cache: false,我能够在IE中使用它。这似乎表明浏览器缓存会影响IE中创建的Partials(我不希望出现这种情况)。它还解释了为什么调试器打开会导致$ .ajax调用的行为不同,因为我认为这会强制禁用缓存。

如果有任何人有任何进一步的信息,请在下面评论,但现在我将关闭这个问题。