使用ajax传递表单到控制器方法

时间:2020-04-23 08:42:04

标签: c# ajax asp.net-mvc model-view-controller

我是MVC编程的新手,请原谅这个问题中的任何愚蠢。

$(document).ready(function () {
            $("#btnGenerate").click(function () {

                $.ajax({
                    type: "GET",
                    url: '/Main/MyMethod',  
                    data: JSON.stringify($('#searchForm').serializeArray()),                
                    dataType: 'json',
                    error: function (XMLHttpRequest, textStatus, errorThrown) {

                        alert(errorThrown);
                    }
                })
                return false;
            });
        });

还有我在控制器中的方法:

        [HttpGet]
        public FileStreamResult MyMethod(MyModel r)
        {
          return null;
        }

我确实收到500个内部服务器错误。

4 个答案:

答案 0 :(得分:0)

尝试使用serialize()代替serializeArray()

$.ajax({
    type: "GET",
        url: '/Main/MyMethod',  
        data: JSON.stringify($('#searchForm').serialize()),                
        dataType: 'json',
        error: function(XMLHttpRequest, textStatus, errorThrown) {

        alert(errorThrown);
    }
})

您还可以尝试将method属性更改为HttpPost

[HttpPost]
public FileStreamResult MyMethod(MyModel r)
{
    return null;
}

答案 1 :(得分:0)

如果您要发布信息,

$.ajax({
    type: "POST",
        url: '/Main/MyMethod',  
        data: {
//your MyModel properties e.g. name
name: "MyName",
age: 1
    },


        success: function(data){
    },
        error: function(XMLHttpRequest, textStatus, errorThrown) {

        alert(errorThrown);
    }
})

答案 2 :(得分:0)

$(function(){
    $("#_frmId").submit(function(){
        event.preventDefault();    // Prevent the default behaviour of the form.

        var formdata = $("#_frmId").serialize();    // Serializes the form

        $.ajax({
            url: '@Url.Action("// Method", "// Controller")',
            type:'POST',
            data: formdata,
            success: function(result){
                // Do whatever
            }
        });
    });
})

_frmId表单的ID。

提交表单后,它将调用此方法。

此外,在序列化传递给控制器​​的数据时,无需对其进行字符串化处理。

您要传递给控制器​​的是View的模型,而不是表单模型。

所以您的控制器动作应类似于

public FileStreamResult MyMethod(//<The View model> r)

最后,您要将数据发布到控制器,因此请删除[HttpGet]

答案 3 :(得分:0)

如果序列化不起作用,也可以尝试这种方法。

$("#my_form").submit(function(event){
event.preventDefault(); //prevent default action 
var post_url = $(this).attr("action"); //get form action url
var request_method = $(this).attr("method"); //get form GET/POST method
var form_data = $(this).serialize(); //Encode form elements for submission

`$.ajax({
    url : post_url,
    type: request_method,
    data : form_data
}).done(function(response){ //
    $("#server-results").html(response);
});

})`

相关问题