我有一个关于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 post",而是一个普通的post,它会将我转到一个新页面。我不明白是什么原因造成了这两个Ajax表单之间的差异,为什么这个“动态生成”的Ajax表单表现得像一个普通的html表单?
顺便说一下,我知道我可以使用Javascript以不同的方式完成这项工作,但我想知道是否可以使用MVC帮助程序和Ajax库来完成这项工作,如果答案是“是”,那么我在哪里做错了。
非常感谢,
黄蜂
发布于 2010-02-02 19:12:40
我不知道MS AJAX能否做到这一点,但我可以告诉你哪里出了问题。一旦您在第一个ajax上更新了partial,这个更新的partial就包含了为新表单注册ajax的javascript。这个javascript是而不是执行的,因为没有任何东西告诉它要执行。您必须在第一个ajax请求的成功回调时调用一个javascript函数,该函数为第二个表单注册ajax。
发布于 2013-09-03 20:40:39
编辑/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()”方法将事件处理程序添加到文档中。
https://stackoverflow.com/questions/2183475
复制相似问题