AJAX Объект передает контроллеру нулевое значение - PullRequest
0 голосов
/ 21 июня 2020

Добрый день,

Я в своем уме и знаю, что, вероятно, мне не хватает чего-то простого. После поиска и поиска я не могу найти решение, которое мне подходит. Моя проблема в том, что я пытаюсь передать информацию из полей ввода через AJAX в контроллер, используя JSON.

Это код для моей C# модели

public partial class EgInput
{
        public string DisplayId { get; set; }
        public string EgUid { get; set; }
        public double Quantity { get; set; }
        public string Quality { get; set; }
        public string Required { get; set; }
        public string MaxAmount{ get; set; }
}

Это код для моего C# действия контроллера

public String SaveTest(EgInput obj)
{
    Debug.WriteLine("Uid Value: "+ obj.DisplayId);

    return (obj.DisplayId);
}

Ниже приведены поля ввода

    <input asp-for="DisplayId" class="form-control" />
    <span asp-validation-for="DisplayId" class="text-danger"></span>
    
    <input asp-for="EgUid" class="form-control" />
    <span asp-validation-for="EgUid" class="text-danger"></span>
    
    <table>
     <tr id="eg_row">
            <td>
                <input asp-for="Quantity" class="form-control" />
                <span asp-validation-for="Quantity" class="text-danger"></span>
            </td>
           
            <td>
                <input asp-for="Quality" class="form-control" />
                <span asp-validation-for="Quality" class="text-danger"></span>
            </td>
    
            <td>
                <input asp-for="Required" class="form-control" />
                <span asp-validation-for="Required" class="text-danger"></span>
            </td>
    
            <td>
                <input asp-for="MaxAmount" class="form-control" />
                <span asp-validation-for="MaxAmount" class="text-danger"></span>
            </td>
    
        </tr>
    </table>
<button type="button" id="save_test">Save</button>

Это JavaScript Я выполняю.

 $('#save_test').on("click", function () {
        
        $("tr").each(function () {
            if ($(this).is("#eg_row")) {
                var did = $("#DisplayId").val();
                var eid = $("#EgUid").val();
                var quantity = $(this).find("#Quantity").val();
                var quality = $(this).find("#Quality").val();
                var req = $(this).find("#Required").val();
                var max = $(this).find("#MaxAmount").val();
                
                var obj = JSON.stringify({
                    "DisplayId": did,
                    "EgUid": eid,
                    "Quantity": quantity,
                    "Quality": quality,
                    "Required": req,
                    "MaxAmount": max
                });

                console.log("clicked");
                $.ajax({
                    type: "POST",
                    dataType: "json",
                    data: obj,
                    contentType: 'application/json',
                    url: '/Index/SaveTest',
                    success: function (msg) {
                        alert(msg);
                    }
                }); 
            }
        });
    });

У меня консоль зарегистрировала массив JSON, чтобы убедиться, что это действительно значения, извлеченные из полей. Я проверил, что вызывается правильное действие в контроллере, и изменил его возврат на сообщение, чтобы узнать, что оно было успешно обработано. Использование функции is () в C# говорит, что объект действительно соответствует типу. Однако при использовании консоли отладки для проверки информации в объекте значения всегда равны нулю. Заранее благодарим за любую оказанную помощь.

1 Ответ

0 голосов
/ 22 июня 2020

Как я уже сказал, это было довольно простое решение моей проблемы. По какой-то причине строка JSON не передавалась. Я попытался использовать атрибут [FromBody] или [FromUri], но объект по-прежнему оставался пустым. Поэтому вместо этого я попытался просто передать объект Javascript напрямую и не использовал json и переданные данные.

Исправленный JavaScript Код ниже

$('#save_test').on("click", function () {
        
        $("tr").each(function () {
            if ($(this).is("#eg_row")) {
                var did = $("#DisplayId").val();
                var eid = $("#EgUid").val();
                var quantity = $(this).find("#Quantity").val();
                var quality = $(this).find("#Quality").val();
                var req = $(this).find("#Required").val();
                var max = $(this).find("#MaxAmount").val();
                
                var obj = {
                    "DisplayId": did,
                    "EgUid": eid,
                    "Quantity": quantity,
                    "Quality": quality,
                    "Required": req,
                    "MaxAmount": max
                };

                console.log("clicked");
                $.ajax({
                    type: "POST",
                    dataType: "html",
                    data: obj,
                    contentType: 'application/x-www-form-urlencoded',
                    url: '/Index/SaveTest',
                    success: function (msg) {
                        alert(msg);
                    }
                }); 
            }
        });
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...