передать форму, используя ajax метод get to controller - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в 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 голосов
/ 23 апреля 2020

Если сериализация не работает, этот подход также можно попробовать.

$("#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 голосов
/ 23 апреля 2020

Если вы делаете сообщение,

$.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 голосов
/ 23 апреля 2020
$(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 идентификатор формы.

Когда форма будет отправлена, она вызовет этот метод.

Кроме того, нет необходимости систематизировать передаваемые данные к контроллеру во время его сериализации.

То, что вы передаете контроллеру, - это модель представления, а не модель формы.

Таким образом, действие вашего контроллера должно быть примерно таким:

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

Наконец, вы отправляете данные на контроллер, поэтому удалите [HttpGet]

0 голосов
/ 23 апреля 2020

Попробуйте использовать 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...