使用ajax get to controller方法传递表单。

问题描述 投票:0回答:1

我是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内部服务器错误。

c# ajax asp.net-mvc model-view-controller
1个回答
0
投票

试试使用 serialize() 而不是 serializeArray()

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

        alert(errorThrown);
    }
})

你也可以尝试将方法属性改为 HttpPost:

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

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);
    }
})

0
投票

如果serialize不行,也可以试试这种方法。

$("#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);
});

})`


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]

© www.soinside.com 2019 - 2024. All rights reserved.