如何从ASP.NET MVC / jQuery Dialog调用ajax调用表单提交?

时间:2013-07-20 02:15:32

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

当用户点击超链接时,我想运行后台进程。在我运行之前,我想使用jQuery对话框(表单)询问用户的权限。当用户在表单上单击“确定”时,我想使用jQuery ajax运行该操作。如果进程失败,那么我想用“错误”更新该弹出窗口。我如何使用jQuery AJAX在asp.net MVC中执行此操作。以下是我试过的代码

这是我的MVC Ajax开始表单代码

@using (Ajax.BeginForm("Action1", "Controller1", new AjaxOptions { UpdateTargetId = "eProcess" }, new { id = "eProcess" }))
{
    @Html.Hidden("eID", eId);                                                                                  
    @Html.Hidden("processName", "processName");                                                                                                                                                
    <div class="hide" id="dialog" title="Confirmation Required">
        Are you sure you want to update this record? <br />                       
        <input type="button" value="Hit" id="btnHit" />                    
    </div>    
}

以下是我的对话框代码

$("#dialog").dialog
({
    dialogClass: "ee-detail-info",
    closeOnEscape: false,
    height: 200,
    width: 300,
    modal: true,
    autoOpen: false,
    open: function (event, ui) {

        $("#btnHit").click(function () {

            $('#processName')[0].value = processName;
            document.forms.eProcess.submit();  

        });
        }

});

我甚至尝试过使用.ajax方法,但仍在使用完整的帖子。我仔细检查了我的jQuery文件。它们在页面上正确链接。

$("#eProcess")[0].submit(function () {
    $.ajax({
        url: $("#eProcess")[0].action,
        success: function (res) {
            alert("Success");
        }
    });
});

更新

我使用了您的解决方案。我的代码中有错误。

1 个答案:

答案 0 :(得分:2)

  

我仔细检查了我的jQuery文件。它们在页面上正确链接。

确保在jquery之后包含了jquery.unobtrusive-ajax.js脚本。

如果是这种情况,则无需手动订阅任何.click事件。只需离开Ajax.BeginForm即可发送AJAX请求。

如果您不想依赖Ajax.BeginForm,那么只需写一个普通的表格:

@using (Html.BeginForm("Action1", "Controller1", FormMethod.Post, new { id = "eProcess" }))
{
    @Html.Hidden("eID", eId);                                                                                  
    @Html.Hidden("processName", "processName");                                                                                                                                                
    <div class="hide" id="dialog" title="Confirmation Required">
        Are you sure you want to update this record? <br />                       
        <input type="button" value="Hit" id="btnHit" />                    
    </div>    
}

然后:

$(function() {
    $("#dialog").dialog({
        dialogClass: "ee-detail-info",
        closeOnEscape: false,
        height: 200,
        width: 300,
        modal: true,
        autoOpen: false
    });

    $('#dialog').on('submit', '#eProcess', function() {
        // here you could set the value of the the hidden field
        // if you wanted to pass some additional information
        // to the controller

        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function(result) {
                $('#eProcess').html(result);
            }
        });
        return false;
    }); 
});