javascript - 无法重载 Ajax.BeginForm 的提交方法

标签 javascript jquery ajax asp.net-mvc-3 razor

我正在尝试从我的 razor View 提交 ajax 表单,并且我希望 Controller 返回一个 JSON 对象。当我使用 ("#form0").submit(alert("hi");); 时数据发送到 Controller ,我收到警报。但是,当我使用 ("#form0").submit(function(){alert("hi");});数据没有通过,我没有收到警报。我感觉这是我所缺少的语法中的一个小问题。相关代码如下:

jquery:

$(function () {
//setting up the schedule modal dialoag.
$("#schedModal").dialog({
    buttons: {
        Submit:
                function () {
                    $("#form0").ajaxSubmit(function () {
                        //this is where I want to put the magic, but I need the alert to fire first.
                        alert("hi");
                        return false;
                    });
                },
        Cancel:
                function () {
                    $(this).dialog("close");
                }
    },
    autoOpen: false,
    minHeight: 350,
    modal: true,
    resizable: false
});

目标 View :

@model FSDS.DataModels.Schedule

@using (Ajax.BeginForm("scheduleNew", null, new AjaxOptions { UpdateTargetId = "partial" }, new {}))
{
@Html.ValidationSummary(true)

    <div class="editor-label">
        @Html.LabelFor(model => model.ScheduleName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ScheduleName)
        @Html.ValidationMessageFor(model => model.ScheduleName)
    </div>

    @* tons of other labels and editor fields go in here, omitted for brevity. *@
}

Controller ,如果重要的话:

    [HttpPost]
    public ActionResult scheduleNew(Schedule schedule)
    {
        if (Request.HttpMethod == "POST")
        {
            FSDSDBEntities context = new FSDSDBEntities();

            if (ModelState.IsValid)
            {
                context.Schedules.AddObject(schedule);
                context.SaveChanges();
            }

            return Json(schedule);
        }
        else
        {
            return PartialView();
        }
    }

最佳答案

只需使用$('#form0').submit();:

Submit: function () {
    $('#form0').submit();
}

然后在 AjaxForm 中定义一个 OnSuccess 处理程序,当 AJAX 请求成功时将调用该处理程序:

@using (Ajax.BeginForm("scheduleNew", null, new AjaxOptions { OnSuccess = "success", UpdateTargetId = "partial" }, new {}))

最后成功 JavaScript 处理程序:

function success(data) {
    // the form was successfully submitted using an AJAX call.
    // here you could test whether the data parameter
    // represents a JSON object or a partial view
    if (data.ScheduleName) {
        // the controller action returned the schedule JSON object
        // => act accordingly
    } else {
        // the controller action returned a partial view
        // => act accordingly
    }
}

关于javascript - 无法重载 Ajax.BeginForm 的提交方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832470/

相关文章:

javascript - 如何在 knockout 模型迭代中从数组访问同级属性

javascript - for 循环在 firefox 中工作有问题吗?

javascript - 尝试使用 jQuery.ajax 发送 FormData 时出错

php - 使用 AJAX 在 MVC 中调用 php 函数?

JavaScript++ 运算符无法正常工作

javascript - 添加图标到 select2 不基于值

javascript - 如何通过 __vue__ 访问循环项的对象?

javascript - JSON 到多个 HTML 表

javascript - 卡在 jQuery 加载方法上

ruby - Controller 无法检测到 ajax 请求