2010-02-02 82 views
0

我有一个ASP.NET MVC Ajax表单的问题。我在表中生成了几个Ajax表单,如下所示:动态生成的Ajax.BeginForm

<% 
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 helper和Ajax Library来完成,并且如果答案是“是”,我会在哪里做错了。

非常感谢你,

黄蜂

+0

您是否检查了页面的HTMl源?两个标签之间是否有差异? – ali62b 2010-02-02 11:12:13

+0

绝对不是,生成的html/javascript代码是绝对等效的... – Wasp 2010-02-02 11:20:24

回答

2

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

+0

谢谢,我怀疑这样的事情,但我不知道我应该打电话给什么,我没有发现任何关于它的事情。谢谢:) – Wasp 2010-02-02 11:19:41

+0

@Darin Dimitrov,你能指出一篇文章或一段代码来注册ajax吗? – 2012-03-20 15:41:04

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()”方法向文档中添加事件处理程序来完成此操作。