将引导框对话框中的表单发送回控制器

时间:2014-04-24 07:39:30

标签: jquery asp.net-mvc forms post bootbox

我有以下bootbox片段,我在其中通过ajax调用加载消息:

    $.ajax({
        type: "GET",
        url: $("#add-name").val(),
        success: function (data) {
            bootbox.dialog({
                message: data,
                title: "Floorplan Group",
                buttons: {
                    success: {
                        label: "OK",
                        className: "btn-success",
                        callback: function () {
                               //what to do here?
                        }
                    }
                }
            });
        }
    });  

这是data返回的内容,并加载到我的bootbox对话框的正文中。

@model Monitoring.ViewModels.NameViewModel
@using (Html.BeginForm("AddName", "Users", FormMethod.Post, new {@class = "form-horizontal",}))
{    
      @Html.EditorFor(m => m.Name)
}

这是我的控制人员:

    [HttpPost]
    public ActionResult AddName(NameViewModel model)
    {
            if (!ModelState.IsValid)
            {
                  //return error
            }
            //add into DB
            return View(model);
    }

如何将表单发回给我的控制器?在bootbox的回调中需要什么代码,以便它返回我的表单,如果ModelState中有任何错误,我的bootbox对话框将保持打开状态,否则对话框将按照正常情况关闭。 / p>

1 个答案:

答案 0 :(得分:0)

首先在您看来,您需要为验证错误消息添加显示,这是通过@Html.ValidationSummary()完成整个过程的最简单方法,您还可以考虑使用@Html.ValidationMessageFor() 。我为表单添加了一个id,以便在javascript中更轻松地发布表单。

@model Monitoring.ViewModels.NameViewModel
@using (Html.BeginForm("AddName", "Users", FormMethod.Post, new {@class = "form-horizontal", @id="SomeFormId"}))
{     @Html.ValidationSummary(false)
      @Html.EditorFor(m => m.Name)
}

我不确定上述视图的名称是什么,所以我在控制器中命名为#34; View1",您需要:

[HttpPost]
public ActionResult AddName(NameViewModel model)
{
    if (!ModelState.IsValid)
    {
         return View("View1", model); // pass the invalid model back to the form view
    }
    //add into DB
    return View(model);
}

在你的javascript中:

$.ajax({
    type: "GET",
    url: $("#add-name").val(),
    success: function(data) {
        bootbox.dialog({
            message: data,
            title: "Floorplan Group",
            buttons: {
                success: {
                    label: "OK",
                    className: "btn-success",
                    callback: function() {
                        $("SomeFormId").submit(); // Post the form
                    }
                }
            }
        });
    }
});