Ошибка при отправке данных с Ajax и получении в контроллере - PullRequest
0 голосов
/ 26 февраля 2020

Я отправляю Json данные, но когда я проверяю свой метод в моем контроллере, он приходит как ноль

html:

<div class="hijo">
                    @Html.LabelFor(m => m.Proyecto, new { @class = "", style = "color:#040404" })
                    @Html.DropDownListFor(Model => Model.ProyectoID, Model.Proyecto, "Seleccionar")
                    @Html.ValidationMessageFor(Model => Model.Proyecto, null, new { @class = "label label-danger", id = "Proyecto" })
                </div>
<div class="hijo">
                    <input type="button" id="adicionar" value="Agregar" class="myButton">
                </div>

JS:

$('#adicionar').click(function () {
        debugger;
        var data= {
        Proyecto: $("#ProyectoID option:selected").text()
    };
    $.ajax({
        url: "../ManejoDatos",
        type: "POST",
        dataType: "json",  
        data: JSON.stringify(data),
        success: function (mydata) {
            $("#UpdateDiv").html(mydata);
            history.pushState('', 'New URL: ' + href, href); // This Code lets you to change url howyouwant
        }
    });
 }

Мой контроллер

public JsonResult ManejoDatos(string Proyecto)
    {
         ........
         ...
        return Json(Proyecto);
    }

Консоль

enter image description here

Не знаю, можно ли что-то очень просто исправить но я не вижу ошибки

regards

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Простые типы, такие как string,int,float et c, должны выбираться из строки запроса в. Net framework, где сложные типы всегда выбираются из тела.

Solution-1

В этом случае. Net Framework ожидает строку Proyecto из параметров запроса, и вы можете вызывать свой API-интерфейс таким образом, не внося изменений в код на стороне сервера

Примечание: Также вам не нужно определять ключ параметра (в запросе http), который определяется как [From Body]. В общей сложности один простой тип может быть передан с использованием атрибута [FromBody], который вы можете увидеть ниже, например: =ProyectoValue

POST ../ManejoDatos HTTP/1.1
Host: localhost:59353
Content-Type: application/x-www-form-urlencoded
=ProyectoValue

Solution-2

Или вы Вы можете вызвать свой API, поместив все свои параметры в сложную модель и передавая параметры через тело вместо параметров запроса, подобных этому

Модель сложного типа

public class MyModel
    {
        public string Proyecto{ get; set; }
    }

Код API

public JsonResult ManejoDatos(MyModel myModel)
    {
         //Access using mymodel.Proyecto
         ........
         ...
        return Json(mymodel.Proyecto);
    }

И теперь вы можете использовать свой API, передавая параметры через тело, как это

POST ../ManejoDatos HTTP/1.1
Host: localhost:59353
Content-Type: application/x-www-form-urlencoded

proyecto=myproyecto
0 голосов
/ 26 февраля 2020

Я нашел ваш JavaScript код абсолютно в порядке. Странно то, что контроллер с вашим форматом не работает призрачно, но я добился успеха следующим образом:

        [System.Web.Http.HttpPost]
        public HttpResponseMessage ManejoDatos(string Proyecto)
        {
            var data = " my test data ";
            return Request.CreateResponse(HttpStatusCode.OK, data);
        }

Я разберусь с этим, очевидно, и обновлю ответ снова.

Надеюсь, что идея поможет вам решить вашу проблему. Дайте мне знать, если у вас возникнут какие-либо проблемы.

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