Отправка строковых данных в MVC-контроллер с использованием jQuery $.ajax() и $.post()

Там должно быть что-то, что мне не хватает. Я попытался использовать $.ajax() и $.post(), чтобы отправить строку в мой MVC-контроллер ASP.NET, и пока контроллер достигнут, строка будет равна null, когда она туда попадет. Итак, вот почтовый метод, который я пробовал:

$.post("/Journal/SaveEntry", JSONstring);

И вот метод ajax, который я пробовал:

$.ajax({
    url: "/Journal/SaveEntry",
    type: "POST",
    data: JSONstring
});

Вот мой контроллер:

public void SaveEntry(string data)
{
    string somethingElse = data;
}

Для фона я сериализовал объект JSON с помощью JSON.stringify(), и это было успешным. Я пытаюсь отправить его на мой контроллер для Deserialize(). Но, как я уже сказал, строка возвращается как null каждый раз. Любые идеи?

Большое спасибо.

UPDATE:. Мне ответили, что моя проблема в том, что я не использовал пару ключ/значение в качестве параметра для $.post(). Поэтому я попробовал это, но строка все еще попала в контроллер как null:

$.post("/Journal/SaveEntry", { "jsonData": JSONstring });

Ответы

Ответ 1

Ответил. У меня не было правильных имен переменных после моего первого обновления. Я изменил имя переменной в контроллере на jsonData, поэтому мой новый заголовок контроллера выглядит следующим образом:

public void SaveEntry(string jsonData)

и мое действие post в JS выглядит так:

$.post("/Journal/SaveEntry", { jsonData: JSONstring });

JSONstring - это "стробированный" (или "сериализованный" ) объект JSON, который я сериализую, используя плагин JAON

Ответ 2

Итоговый ответ:

Кажется, что имена переменных не выстраивались в его должности, как я предложил в комментарии после сортировки проблем форматирования данных (предполагая, что это тоже проблема.

Собственно, убедитесь, что вы используете правое ключевое имя, что ваш серверный кода, а также Пример Олека - т.е. если код youre ищет переменные данные, то вы необходимо использовать данные в качестве ключа. - prodigitalson 6 часов назад

@prodigitalson, это сработало. имена переменных не выстраивались. Будет вы отправляете второй ответ, чтобы я мог принять это? Благодарю. - Мега Мэтт 6 часов назад

Поэтому ему нужно было использовать пару ключ/значение и убедиться, что он захватывает правую переменную из запроса на стороне сервера.


аргумент данных должен быть парой значений ключа

$.post("/Journal/SaveEntry", {"JSONString": JSONstring});

Ответ 3

Кажется, DataType пропущен. Вы также можете установить contentType на всякий случай. Вы попробуете эту версию?

$.ajax({
    url: '/Journal/SaveEntry',
    type: 'POST',
    data: JSONstring,
    dataType: 'json',
    contentType: 'application/json; charset=utf-8'
});

Приветствия.

Ответ 4

Спасибо за ответ, это решит мой кошмар.

Моя сетка

..
.Selectable()
.ClientEvents(events => events.OnRowSelected("onRowSelected"))
.Render();

<script type="text/javascript">
function onRowSelected(e) {
        id = e.row.cells[0].innerHTML;
        $.post("/<b>MyController</b>/GridSelectionCommand", { "id": id});
    }
</script>

мой контроллер

public ActionResult GridSelectionCommand(string id)
{
     //Here i do what ever i need to do
}

Ответ 5

Путь здесь.

Если вы хотите указать

dataType: 'json'

Затем используйте

$('#ddlIssueType').change(function () {


            var dataResponse = { itemTypeId: $('#ddlItemType').val(), transactionType: this.value };

            $.ajax({
                type: 'POST',
                url: '@Url.Action("StoreLocationList", "../InventoryDailyTransaction")',
                data: { 'itemTypeId': $('#ddlItemType').val(), 'transactionType': this.value },
                dataType: 'json',
                cache: false,
                success: function (data) {
                    $('#ddlStoreLocation').get(0).options.length = 0;
                    $('#ddlStoreLocation').get(0).options[0] = new Option('--Select--', '');

                    $.map(data, function (item) {
                        $('#ddlStoreLocation').get(0).options[$('#ddlStoreLocation').get(0).options.length] = new Option(item.Display, item.Value);
                    });
                },
                error: function () {
                    alert("Connection Failed. Please Try Again");
                }
            });

Если вы не укажете

dataType: 'json'

Затем используйте

$('#ddlItemType').change(function () {

        $.ajax({
            type: 'POST',
            url: '@Url.Action("IssueTypeList", "SalesDept")',
            data: { itemTypeId: this.value },
            cache: false,
            success: function (data) {
                $('#ddlIssueType').get(0).options.length = 0;
                $('#ddlIssueType').get(0).options[0] = new Option('--Select--', '');

                $.map(data, function (item) {
                    $('#ddlIssueType').get(0).options[$('#ddlIssueType').get(0).options.length] = new Option(item.Display, item.Value);
                });
            },
            error: function () {
                alert("Connection Failed. Please Try Again");
            }
        });

Если вы хотите указать

dataType: 'json' и contentType: 'application/json; кодировка = UTF-8'

Затем используйте

$.ajax({
            type: 'POST',
            url: '@Url.Action("LoadAvailableSerialForItem", "../InventoryDailyTransaction")',
            data: "{'itemCode':'" + itemCode + "','storeLocation':'" + storeLocation + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            cache: false,
            success: function (data) {

                $('#ddlAvailAbleItemSerials').get(0).options.length = 0;
                $('#ddlAvailAbleItemSerials').get(0).options[0] = new Option('--Select--', '');

                $.map(data, function (item) {
                    $('#ddlAvailAbleItemSerials').get(0).options[$('#ddlAvailAbleItemSerials').get(0).options.length] = new Option(item.Display, item.Value);
                });
            },
            error: function () {
                alert("Connection Failed. Please Try Again.");
            }
        });

Ответ 6

Если вы все еще не можете заставить его работать, попробуйте проверить URL страницы, с которой вы вызываете $.post.

В моем случае я вызывал этот метод из localhost:61965/Example, а мой код:

$.post('Api/Example/New', { jsonData: jsonData });

Firefox отправил этот запрос на localhost:61965/Example /Api/Example/New, поэтому мой запрос не работал.