Перехватить объект из ajax — asp.net ядро 2.1

#javascript #asp.net #ajax #asp.net-core

#javascript #asp.net #ajax #asp.net-ядро

Вопрос:

Я пытаюсь отправить весь объект из javascript в asp.net основной контроллер.

Вот класс C #, который у меня есть:

 public class AREvent
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Text { get; set; }
}
  

Я передаю его из ajax следующим образом:

 function Upp() {
    var ev = {};

    ev.ID = 1;
    ev.Title = "asd";
    ev.Text = "Some text";

    var fd = new FormData();
    fd.append("e", ev);
    fd.append("aaa", "Some text");

    alert(ev.ID); // alerts 1

    $.ajax({
        type: "POST",
        url: "/Events/Add1",
        cache: false,
        contentType: false,
        processData: false,
        data: fd,
        success: function () {
        }
    });
}
  

и вот контроллер:

 [HttpPost]
[Route("/Events/Add1")]
public async Task<IActionResult> Add1(AR.AREvent e, string aaa)
{
    /// aaa is passed as "some text"
    /// e is passed as null or as empty object
    object a = e;
    return Json("1");
}
  

Ответ №1:

Вам не нужно передавать FormData. Вы должны передать объект следующим образом:

 $.ajax({
            url: "/Events/Add1",
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify(ev),
            contentType:  "application/json",
            success: function (result, text, xhr) {

            },
            error: function (request, status, error) {
            }
        });
  

И в контроллере:

 [HttpPost]
[Route("/Events/Add1")]
public async Task<IActionResult> Add1([FromBody] AREvent e)
{
    AREvent a = e;
    return Json("1");
}
  

Ответ №2:

Насколько я знаю, если вы хотите передать данные формы в контроллер, нет необходимости создавать новую модель js с именем ev. Вы должны напрямую добавить значение свойства в модель данных формы в js и asp.net привязка к базовой модели свяжет значение автоматически. Привязка модели будет отображать свойство в соответствии с именем данных формы вместо объекта.

Более подробную информацию вы можете найти в приведенных ниже кодах:

 function Upp() {
  

    var fd = new FormData();
    fd.append("ID", 1);
    fd.append("Title", "asd");
    fd.append("Text", "Some text");
    fd.append("aaa", "Some text2");

    $.ajax({
        type: "POST",
        url: "/Events/Add1",
        cache: false,
        contentType: false,
        processData: false,
        data: fd,
        success: function () {
        }
    });
}
  

Результат:

введите описание изображения здесь