0

我对 ASP.NET MVC Ajax 表单有疑问。我在一个表中生成了几个 Ajax 表单,如下所示:

<% 
foreach (var item in Model)
       {
           var statefulItem = item as StatefulEffectiveItem; %>
    <tr>
        <td>
            <% using (Ajax.BeginForm("ShowAddActivity", "EffectiveItems", new { id = item.Id }, new AjaxOptions() { UpdateTargetId = "details", OnSuccess = "dialogIt" }))
               { %>
            <input type="submit" name="activity" value="Add Activity" />
            <% } %>
        </td>
    </tr>
    <% } %>

到目前为止,一切都很好。当我发布其中一个表单时,它会在 div 中呈现部分视图,并且这个新的部分视图包含一个新的 Ajax.BeginForm(它未嵌套在原始表单中)。这第二个 Ajax.BeginForm 与我在表中生成的完全相似,但是当我发布它时,我没有得到“Ajax 帖子”,而是一个普通的帖子,它将我发送到一个新页面。我不明白是什么导致了这两个 Ajax 表单之间的差异,为什么这个“动态生成的”Ajax 表单表现得像一个普通的 html 表单?

顺便说一句,我知道我可以使用 Javascript 以不同的方式做到这一点,但我想了解这是否可以仅使用 MVC 帮助程序和 Ajax 库来完成,如果答案是“是”,那么我做错了。

非常感谢,

黄蜂

4

2 回答 2

2

我不知道它是否可以用 MS AJAX 完成,但我可以告诉你出了什么问题。一旦你更新了第一个 ajax 的部分,这个更新的部分包含 javascript 来为新表单注册 ajax。这个 javascript没有被执行,因为没有任何东西告诉它执行。您必须在第一个 ajax 请求的成功回调上调用一个为第二种形式注册 ajax 的 javascript 函数。

于 2010-02-02T11:12:40.340 回答
0

编辑 /scripts/jquery.unobtrusive-ajax.js 文件

改变

$("a[data-ajax=true]").on("click", function (evt) { ..... }

$(document).on("click","a[data-ajax=true]", function (evt) { ...... }

对文件中的所有其他事件注册执行此操作。

$(document).on("click","form[data-ajax=true] input[type=image]"
$(document).on("click","form[data-ajax=true] :submit"
$(document).on("submit","form[data-ajax=true]", 

这样,您将事件注册到文档中,从而允许对动态添加的元素进行事件处理。jQuery 以前使用“.live()”,但现在您可以使用“.on()”方法将事件处理程序添加到文档中。

于 2013-09-03T12:40:38.710 回答