ASP Net Core3.1 AJAX Post, отправляющий NULL в контроллер

Прошло 3 дня, я пытаюсь отправить данные формы [POST] с помощью ajax, Javascript и HTML в контроллер MVC, но получаю значение null.

Пожалуйста, найдите контроллер и код ajax, пожалуйста, помогите мне в этом, а также дайте мне знать, возможно или нет отправлять данные с ajax на контроллер mvc?

Я новичок ..... заранее спасибо.

[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> CreateNewBug([FromBody] BugTrackerRequest bugTrackerRequest)
{
    // BugTrackerResponse bugTrackerResponse = null;
    if (ModelState.IsValid)
    {
        var Request = await _projectDetails.CreateNewBug(bugTrackerRequest);

        if (Request > 0)
        {
            BugTrackerResponse bugTrackerResponse = new BugTrackerResponse();
            bugTrackerResponse.Issuccess = true;
            // return Ok(new {Messgage = "Data save successfully in the DB"});     
            return Ok();
        }
    }
    return StatusCode(500, new { Message = "Something went wrong" });
    // return bugTrackerResponse;
    //return StatusCode();

}

public class BugTrackerRequest:APIResponse
    {
        public int TicketId { get; set; }
        public string ProjectName { get; set; }
        public string ProjectDescription { get; set; }
        public string Title { get; set; }
        public string Status { get; set; }
        public string AssignTo { get; set; }
        public string AssignFrom { get; set; }
        public byte[] Attachment { get; set; }
        public string Impact { get; set; }
        public string Platform { get; set; }
        public string Priority { get; set; }
        public string BugType { get; set; }
        public DateTime CreatedDate { get; set; }
    }
}

function savedetails() {
 let saveuidetails = new   BugdetailRequestclass();

 saveuidetails.ProjectName = $('#projectprojectname').val();
    saveuidetails.ProjectDescription = $('#description').val();
    saveuidetails.Title = $('#title').val();
    saveuidetails.Status = $('#status').val();
    saveuidetails.AssignTo = $('#assignto').val();
    saveuidetails.AssignFrom = $('#assignfrom').val();
    saveuidetails.Attachment = $('#Attfileupload').val;
    saveuidetails.Impact = $('#Priority').val();
    saveuidetails.Platform = $('#platform').val();
    saveuidetails.Priority = $('#Priority').val();
    saveuidetails.BugType = $('bugtype').val();
    saveuidetails.CreatedDate = $('#currentdate').val();

 $.ajax({
        type: 'POST',
        url: '/TicketController1/CreateNewBugFromBody',
        dataType: "json",
        contentType: 'application/json',
        data: JSON.stringify(saveuidetails),
        success: function (data) {
            console.info('success', data);
        },
        error: function () { alert('Exeption:'); }
    });
 }

вы видите какую-либо ошибку в консоли браузера?

Swati 20.12.2020 13:16

нет ошибки входа в консоль браузера

dks 21.12.2020 12:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
211
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш URL-адрес в POST неверен, измените его.

/TicketController1/CreateNewBugFromBody

к

 /TicketController1/CreateNewBug

Убедитесь, что ваш класс контроллера называется TicketController1.

Для начала прокомментируйте

saveuidetails.Attachment = $('#Attfileupload').val;

в js и

public DateTime CreatedDate { get; set; }
public byte[] Attachment { get; set; }

Когда метод контроллера работает, вы можете посмотреть на Attachment, что будет проблемой. В основном у вас есть три варианта (https://stackoverflow.com/a/4083908/14072498):

  1. Base64 кодирует файл за счет увеличения размера данных на около 33%, а также дополнительные затраты на обработку как на сервере, так и на клиенте. для кодирования/декодирования.
  2. Сначала отправьте файл в multipart/form-data POST и верните идентификатор в клиент. Затем клиент отправляет метаданные с идентификатором, а сервер повторно связывает файл и метаданные.
  3. Сначала отправьте метаданные и верните идентификатор клиенту. затем клиент отправляет файл с идентификатором, и сервер повторно связывает файл и метаданные.

В противном случае ваш код, показанный здесь, выглядит нормально для меня, и нет проблем с использованием для этого контроллера MVC. Если контроллер содержит только методы API, вы должны расширить его от ControllerBase вместо Controller и аннотировать контроллер [ApiController]. Последний автоматически вызывает проверку модели.

При реализации новых конечных точек API всегда начинайте с чего-то простого и проверяйте, например, Почтальон, что вы можете добраться до своей новой конечной точки.

Ответ принят как подходящий
url: '/TicketController1/CreateNewBugFromBody',

public async Task<IActionResult> CreateNewBug([FromBody] BugTrackerRequest bugTrackerRequest)

Во-первых, проверьте URL-адрес вашего запроса и метод действия, кажется, что вы отправляете форму методу CreateNewBugFromBody, а не методу действия CreateNewBug. Поэтому попробуйте изменить свой код, как показано ниже (я предполагаю, что имя вашего контроллера TicketController1, и вы хотите отправить метод CreateNewBug):

 $.ajax({
        type: 'POST',
        url: '/TicketController1/CreateNewBug',
        dataType: "json",
        contentType: 'application/json',
        data: JSON.stringify(saveuidetails),
        success: function (data) {
            console.info('success', data);
        },
        error: function () { alert('Exeption:'); }
    });

Во-вторых, проверьте свой объект JQuery BugdetailRequestclass, в методе действия он получает объект BugTrackerRequest. Итак, попробуйте изменить свой код, как показано ниже (пожалуйста, измените URL-адрес запроса и значение селектора jquery на свое):

function savedetails() {
    var saveuidetails = {};  //define a object
    saveuidetails.ProjectName = $('#ProjectName').val();
    saveuidetails.ProjectDescription = $('#Description').val();
    saveuidetails.Title = $('#Title').val();
    saveuidetails.Status = $('#Status').val();
    saveuidetails.AssignTo = $('#AssignTo').val();
    saveuidetails.AssignFrom = $('#AssignFrom').val();
    saveuidetails.Attachment = $('#Attfileupload').val;
    saveuidetails.Impact = $('#Priority').val();
    saveuidetails.Platform = $('#Platform').val();
    saveuidetails.Priority = $('#Priority').val();
    saveuidetails.BugType = $('#BugType').val();  
    saveuidetails.CreatedDate = $('#CreatedDate').val();

    $.ajax({
        type: 'POST',
        url: '/Home/CreateNewBug',
        dataType: "json",
        contentType: 'application/json',
        data: JSON.stringify(saveuidetails),
        success: function (data) {
            console.info('success', data);
        },
        error: function () { alert('Exeption:'); }
    });
}

Кроме того, вы можете добавить точку останова в ресурс JavaScript и метод действия CreateNewBug и проверить, сможете ли вы получить правильные данные до/после отправки запроса Ajax. Скриншот, как показано ниже:

Скриншот отладки JavaScript (с использованием инструментов разработчика F12)

Скриншот отладки метода действия:

Большое спасибо @Zhi Lv, теперь он работает нормально после изменений, которые вы мне сказали ... также не могли бы вы помочь мне, как мне улучшить логику кода с помощью самостоятельных упражнений.

dks 21.12.2020 12:48

@KuwarpratapSingh: Если этот ответ решил вашу проблему, отметьте его как принятый. Если вам нужно что-то еще, пожалуйста, задайте новый вопрос. BR

Roar S. 21.12.2020 19:23

Другие вопросы по теме