javascript - 我的模态弹出窗口中的 .submit(function ()) 不起作用,我的模态弹出窗口将发送正常的 http post 请求

标签 javascript jquery ajax asp.net-mvc razor

我正在开发一个 ASP.NET MVC Web 应用程序。在我的主视图中,我得到了以下创建链接:-

    <a class="btn btn-success" data-modal="" href="/Staff/Create" id="btnCreate">
    <span class="glyphicon glyphicon-plus"></span>      
    </a>


<!-- modal placeholder-->
<div id='myModal' class='modal fade in'>
    <div class="modal-dialog">
        <div class="modal-content">
            <div id='myModalContent'></div>
        </div>
    </div>
</div>

我有以下脚本:-

$(function () {
    $.ajaxSetup({ cache: false });
    $("a[data-modal]").on("click", function (e) {

        $('#myModalContent').load(this.href, function () {
            $('#myModal').modal({
                keyboard: true
            }, 'show');
            $('#myModalContent').removeData("validator");
            $('#myModalContent').removeData("unobtrusiveValidation");
            $.validator.unobtrusive.parse('#myModalContent');
            bindForm(this);
        });
        return false;
    });


});

function bindForm(dialog) {
    $('#myModalContent', dialog).submit(function () {

        if ($('#myModalContent').valid()) {
            $('#progress').show();
            $.ajax({
                url: this.action,
                type: this.method,
                data: $(this).serialize(),
                success: function (result) {
                    if (result.success) {
                        $('#myModal').modal('hide');
                        $('#progress').hide();
                        //location.reload();
                        alert('www');
                    } else {

                        $('#progress').hide();
                        $('#myModalContent').html(result);
                        bindForm();
                    }
                }
            });
     }
        else {
           return false;
   }
    });
}

现在,当我单击“创建”链接时,“创建”操作方法将返回以下部分 View ,该 View 将在模式弹出窗口内呈现:-

@model SkillManagement.Models.Staff

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Staff</h4>
        <hr />
        @Html.ValidationSummary(true)

        <div class="form-group">
            @Html.LabelFor(model => model.GUID, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.GUID)
                @Html.ValidationMessageFor(model => model.GUID)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.UserName, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.UserName)
                @Html.ValidationMessageFor(model => model.UserName)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.IsExternal, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.IsExternal)
                @Html.ValidationMessageFor(model => model.IsExternal)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.FirstName, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.FirstName)
                @Html.ValidationMessageFor(model => model.FirstName)
            </div>
        </div>

        //code goes here
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

到目前为止,我一切正常,将调用 Get Create 操作方法,并且部分 View 将在模式弹出窗口内呈现。

但现在在我的部分 View 中,如果我单击“创建”按钮,将调用 Post 创建操作方法,但不是由于 javascript 代码。当我在 Post 创建操作方法中检查 Request.IsAjax() 时,我发现它不是 ajax 请求,这意味着部分 View 发送正常的 Post http 而不是 ajax 请求,如定义在脚本,任何人都可以建议我当前的方法有什么问题吗? 谢谢

最佳答案

如您所见,您只需将 #myModalContent 节点传递给 bindForm 函数,jQuery 选择器就会查找

// will never find #myModalContent
$('#myModalContent', myModalContentDOMElement).submit(function () {

相反,你应该做这样的事情

$('form', dialog).submit(function (e) {
    e.preventDefault(); // stop the default form submit action

关于javascript - 我的模态弹出窗口中的 .submit(function ()) 不起作用,我的模态弹出窗口将发送正常的 http post 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28036939/

相关文章:

javascript - 表单验证成功时显示隐藏元素

php - 如何在 websockets php 中创建事件?

javascript - 如何在 $(document).ready() 上加载脚本

javascript - Bootstrap 的 jQuery 问题

jquery ajax jsonp : this page is accessing information that is not under its control

jquery - 无法使用 jquery datatable 通过 ajax 从文件中获取数据

Javascript复杂的拖放排序

javascript - Paper.js 中的事件处理程序

javascript - 循环对象数据在 JQuery 中创建 tr 和 td 元素?

javascript - Jquery 或 Javascript : How to find all html elements which has image more than 500px and less than 2000px?