无法将表单内容传递给actionresult中的视图模型

时间:2017-06-12 15:24:07

标签: jquery ajax asp.net-mvc

我正在尝试传递一个字符串(表示已单击的按钮)和表单的内容,但是当代码到达actionresult时,vModel对象始终为null。有人能帮我解决吗?

以下是代码片段:

    var form = $('#Application');
    if (form.valid()) {
            var data = { 
                'submitButton': "Submit your application",
                'vModel': JSON.stringify(form.serialize())
            };

            $("#submit-application-dialog").dialog({
                resizable: false,
                height: "auto",
                width: 400,
                modal: true,
                buttons: {
                    "Submit application": function () {
                        $.ajax({
                            url: form.attr('action'),
                            type: 'POST',
                            data: data,
                            success: $("#submit-application-dialog").dialog("close")
                        });
                    },
                    Cancel: function () {
                        $(this).dialog("close");
                    }
                }
            });
     }

动作结果:

    [HttpPost]
    public ActionResult Application(string submitButton, ApplicationViewModel vModel)
    {
    ...

非常感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

我通过将值附加到查询字符串(如下所示)而不是控制器操作参数来完成类似的操作。

var myData = $('#frmMyForm').serialize();
myData = myData + "&ButtonClicked=" + "Button1";             

            $.ajax({
                type: "POST",
                url: "@Url.Action("MyActionName", "MyControllerName")",
                data: myData,
                contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
                success: function(data) {
                \\Do stuff here if needed;
                }

然后在控制器中我从表单集合中提取值。

var buttonName = Request.Form["ButtonClicked"];

可能会有更好的或者我们说这样做的笨重方式,但这对我有用。

希望有所帮助

您好,我昨晚想到了一个更好的解决方案。向视图模型添加属性,可能称为“ButtonClicked”。

然后在JQuery中,抓住提交的click事件,如下所示,并相应地设置按钮名称。

<script>
    $(document).ready(function () {

        $(document).on("click", "#btnSubmitButton", function () {
            $("#ButtonClicked").val("ThisButton");
        });

    });
 </script>

然后将其绑定到已发布的模型。 感谢