Отправка данных в контроллер MVC с помощью AJAX - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь отправить данные с помощью AJAX в метод MVC Controller, но я не знаю, что я делаю неправильно.

Вот вызов AJAX

$.ajax({
    type: 'POST',
    url: invokingControllerActionUrl,
    data: "it is just a simple string",
    success: function (data) {
        window.location.href = link;
    }
});

А вот и метод контроллера. Он вызывается, но параметр всегда равен нулю.

public IActionResult OnPostTest([FromBody] string stringValue)
{
    // stringValue is always null :(
}

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Измените свой Ajax-вызов на этот

$.ajax({
    type: 'POST',
    url: invokingControllerActionUrl, // Confirm the Path in this variable Otherwise use @Url.Action("OnPostTest", "InvokingController")
    data: {stringValue: "it is just a simple string"},
    success: function (data) {
        window.location.href = link;
    }
});

И удалите [FromBody]. Также лучше определить тип сообщения. Не обязательно, хотя

[HttpPost]
public IActionResult OnPostTest( string stringValue)
{
    // stringValue is always null :(
}
1 голос
/ 02 мая 2019

В зависимости от того, что Content-Type вы отправляете из JS, вам может потребоваться правильно закодировать вашу строку как значение формы

...
data: 'stringValue="it is just a simple string"',
...

или, например, JSON:

...
data: '{stringValue: "it is just a simple string"}',
...

См. Также это обсуждение

К сожалению, я не нашел простого способа передать строку неформатированных данных через параметр. Согласно этому ответу вы можете сделать следующее:

public IActionResult OnPostTest()
{
    Stream req = Request.Body;
    req.Seek(0, System.IO.SeekOrigin.Begin);
    string stringValue = new StreamReader(req).ReadToEnd();
    ...
    // process your stringValue here
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...