Ajax-вызов asp.net - переменные всегда нулевые - PullRequest
0 голосов
/ 08 июля 2019

Я не могу получить ajax для передачи значений в мои обработчики asp.net razorpage.Он всегда получает нулевые значения на стороне бритвы.В остальном это работает, и javascript не отвечает без ошибок.

Функция C # «OnPost» вызывается, но всегда имеет нулевые значения в качестве параметров.

Чего мне здесь не хватает?Я посмотрел на несколько примеров и не мог разобрать.Я пропускаю что-то, что должно быть настроено в проекте?Пожалуйста, дайте мне знать, если я должен предоставить больше кода!

public class TestValues
    {
        public string test1 { get; set; }
        public string test2 { get; set; }
        public string test3 { get; set; }
    }

public class Conf_Parity : PageModel
    {
    public static JsonResult OnPost(TestValues myString)
        {
             var test = myString;
             return new JsonResult("");
        }
    }
}
var output = {
    test1: 'hallo',
    test2: 'peter',
    test3: 'how are you'
};
console.log(output);

$.ajax({
    type: "POST",
    url: "Conf_Parity",
    dataType: "json",
    data: JSON.stringify(output),
    contentType: "application/json; charset=utf-8",                                
    beforeSend: function (xhr) {
        xhr.setRequestHeader("XSRF-TOKEN",
            $('input:hidden[name="__RequestVerificationToken"]').val());
    },                                                                
    failure: function (response) {
        alert(response);
    }
});

1 Ответ

0 голосов
/ 09 июля 2019

Я бы не стал публиковать JSON для обработчика страниц. Существует редко хорошая причина для этого. Я бы просто опубликовал данные формы, как они есть, перед применением метода JSON.stringify. Я бы опубликовал JSON только в конечной точке API, которая требовала этого.

Но если вы хотите опубликовать JSON независимо, вам нужно получить доступ к JSON из тела запроса и десериализовать его:

public async Task OnPostAsync()
{

    using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
    {
        var body = await reader.ReadToEndAsync();
        var testValues = JsonConvert.DeserializeObject<TestValues>(body);
        // do something with testValues.test1 etc.
    }
}

Примечание - в обработчике OnPostAsync нет параметров. Привязка модели не работает с JSON.

...