Отправка строковых данных в контроллер MVC с использованием jQuery $ .ajax () и $ .post () - PullRequest
14 голосов
/ 04 декабря 2009

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

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

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

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

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

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

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

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

ОБНОВЛЕНИЕ: Ответили, что моя проблема в том, что я не использовал пару ключ / значение в качестве параметра для $ .post (). Итак, я попробовал это, но строка все еще поступила в контроллер как ноль:

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

Ответы [ 6 ]

22 голосов
/ 09 декабря 2009

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

public void SaveEntry(string jsonData)

и мое почтовое действие в JS выглядит следующим образом:

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

JSONstring - это «строковый» (или «сериализованный») объект JSON, который я сериализировал с помощью JSON-плагина , предлагаемого на json.org. Итак:

JSONstring = JSON.stringify(journalEntry);  // journalEntry is my JSON object

Таким образом, имена переменных в $ .post и в методе Controller должны совпадать, иначе ничего не будет работать. Хорошо знать. Спасибо за ответы.

5 голосов
/ 04 декабря 2009

Окончательный ответ:

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

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

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

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


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

$.post("/Journal/SaveEntry", {"JSONString": JSONstring});
1 голос
/ 30 сентября 2011

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

Моя сетка

..
.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
}
1 голос
/ 04 декабря 2009

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

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

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

0 голосов
/ 21 января 2018

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

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

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

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

0 голосов
/ 04 марта 2013

Путь здесь.

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

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