动态生成的Ajax.BeginForm

发布于 2024-08-20 03:26:02 字数 945 浏览 8 评论 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 post”,而是一个将我发送到新页面的普通帖子。我不明白是什么导致了这两个 Ajax 表单之间的差异,为什么这个“动态生成”Ajax 表单的行为就像普通的 html 表单一样?

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

非常感谢,

黄蜂

I have a problem with ASP.NET MVC Ajax forms. I generate several Ajax forms in a table, like this:

<% 
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>
    <% } %>

so far so good. When I post one of those forms, it renders a partial view in a div, and this new partial view contains a new Ajax.BeginForm (which is NOT nested in the originator form). This second Ajax.BeginForm is absolutely similar to the ones I generate in the table, but when I post it I don't get an "Ajax post", but a normal post which sends me to a new page. I don't understand what causes the difference between this two Ajax form, why this "dynamically generated" Ajax form behaves like a normal html form?

By the way, I know I can do this in different ways using Javascript, but I would like to understand if this can be done just using MVC helpers and Ajax Library and, if the answer is "yes", where I do wrong.

Thank you very much,

Wasp

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千秋岁 2024-08-27 03:26:02

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

I don't know if it can be done with MS AJAX but I can tell you what is wrong. Once you update the partial on the first ajax, this updated partial contains javascript to register ajax for the new form. This javascript is not executed because there's nothing that is telling it to execute. You must call a javascript function that registers ajax for the second form on the success callback of the first ajax request.

情话已封尘 2024-08-27 03:26:02

编辑 /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()”方法向文档添加事件处理程序来实现此目的。

Edit the /scripts/jquery.unobtrusive-ajax.js file

Change

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

To

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

Do this for all other event registrations in the file.

$(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]", 

This way, you register the events to the document, which allows event handling for the dynamically added elements. jQuery was using ".live()" before, but now you can do this with adding event handlers to the document with the ".on()" method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文