动态添加形式ajax不起作用

时间:2013-03-31 11:48:12

标签: asp.net-mvc asp.net-mvc-3 jquery

我有一个div的列表 当我点击div中的按钮时,我将div内容切换为包含表单的局部视图 这是我点击该按钮时发生的代码:

@Html.ActionLink("edit", "EditUserLanguage", "UserLanguage", new { userLanguageId = Model.UserLanguageId }, new { @class = "editButton" })
...
$(document).on('click', '.editButton', function (e) {
        $.ajax({
            url: this.href,
            cache: false,
            success: function (html) {                
                var id = $(e.target).closest("div").attr("id");
                $("#" + id).empty();
                $("#" + id).append(html);
            }
        });
        return false;
    });

我添加的Html(部分视图)有:

 @using (Html.BeginForm("UpdateUserLanguage", "UserLanguage", FormMethod.Post, new { id = "updateUserLanagegeForm" }))
                            {
    ...

这个主视图div的列表在哪里,我添加这个新的局部视图我有这个代码:

$(function () {
            $('#updateUserLanagegeForm').submit(function () {
                $.ajax({
                    url: this.action,
                    type: this.method,
                    data: $(this).serialize(),
                    success: function (result) {                        
                        alert("work");                        
                    }
                });
                return false;
            });
        }); //update

当我点击提交操作时,会调用方法并返回新的部分视图,但不是通过ajax
我只返回部分视图。永远不会调用alert("work"); 这个ajax调用不起作用的原因是什么?

1 个答案:

答案 0 :(得分:2)

submit处理程序未附加到表单,因为表单在dom准备好后加载。所以将代码更改为 -

$('body').on('submit','#updateUserLanagegeForm',(function () {
    $.ajax({
        url: this.action,
        type: this.method,
        data: $(this).serialize(),
        success: function (result) {                        
            alert("work");                        
        }
    });
    return false;
});

这会将处理程序附加到表单中,即使它是动态添加的。