Получить объект и файл JSON в MVC - PullRequest
0 голосов
/ 17 мая 2019

У меня есть следующий код на стороне клиента для отправки объекта JSON и файла в MVC с использованием JQuery ajax:

var formData = new FormData();
formData.append('logo', logoImg);
var objArr = [];

objArr.push({"id": id, "name": userName});

//JSON obj
formData.append('ocorrencia', JSON.stringify( objArr ));


$.ajax({
    url: "/Ocorrencia/Edit",
    type:"POST",
    processData:false,
    contentType: false,
    data: formData,
        complete: function(data){
                    alert("success");
            }
  });

На стороне сервера я использую ASP.NET MVC.

[HttpPost]
public JsonResult Edit()
{
    // How to retrieve the data and the file here?

У меня есть модель для "ocorrencia". Что мне нужно сделать, чтобы получить модель и файл на стороне сервера?

Ответы [ 4 ]

1 голос
/ 17 мая 2019

Попробуйте использовать FromBodyAttribute

using System.Web.Http; 
public JsonResult Edit([FromBody]List<Ocorrencia> ocorrencia,HttpPostedFileBase logo)
{
}

Отредактировано

using System.Web.Http может быть добавлено пакетом Microsoft.AspNet.WebApi.Core в NuGet.

0 голосов
/ 17 мая 2019

Я скажу, что ваш ajax неверен, ваш промежуточный контент и dataType

Это пример того, что я сейчас использую и отлично работает

 $.ajax({
        type: "POST",
        headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
        url: url,
        data: JSON.stringify(model),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            ... success code here
        },
            error: function (x, y, z) {
            }
        });

Я определяю свою модель как

var model = {
             myObject: "somevalue"
             myOtherObject: 2
             }

URL очевиден

, а затем

[HttpPost]
[Route("sign")]
public async Task<IActionResult> Sign([FromBody]ReportLessonSign model)
{
 // your code in here
}

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

Что касается вашего файла, как вы пытаетесь это пропустить?

0 голосов
/ 17 мая 2019

Вы можете получить как файл логотипа, так и данные

public JsonResult Edit(List<Ocorrencia> ocorrencia,HttpPostedFileBase logoImg)
{
}
0 голосов
/ 17 мая 2019

Вам просто нужно правильно определить подпись Action на вашем контроллере и использовать Newton Json.Например:

[HttpPost]
public JsonResult Edit(List<Ocorrencia> ocorrencia)
{
  var model = JsonConvert.DeserializeObject<List<Ocorrencia>>(ocorrencia);
   ...

Выше код предполагает, что у вас есть класс с именем Ocorrencia.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...