Значения вложенного объекта не следуют в параметре из вызова ajax в actionmethod - PullRequest
0 голосов
/ 29 октября 2019

Значения вложенного объекта в параметре не следуют. Как я могу получить полный объект, включая вложенные значения, чтобы следовать в actionmethod в контроллере?

При вызове метода ajac в объекте внутри красного кольца на рисунках есть значения. Но не следует в контроллере

mapHub.client.requestForHelpInClient = function (requestDetails) {
                debugger;
                $.ajax({
                    type: "GET",
                    url: '@Url.Action("RequestPartialView", "Supplier")',
                    data: requestDetails,
                    success: function (response) {
                        $("#Request").html(response);
                    },
                    error: function (error) {
                        console.log(error);
                    }
                });                }

enter image description here

  function requestForHelp() {
            requestDetails = {
                CustomerId: @Model.Customer.CustomerID,
                NumberOfHours: $("#numberOfHoursTextBox").val(),
                TypeOfMachine: $("#typeOfMachineDropDownMenu").children("option:selected").val(),
                CustomerLocation: CustomerPosition,
                NearestSupplierList: nearestSuppliers
                //StartDate: $( "#startDate" ).val(),
                //EndDate: $( "#endDate" ).val(),
            }
            mapHub.server.requestForHelp(requestDetails);


public class RequestDetails
{
    public int CustomerId { get; set; }
    public Customer Customer { get; set; }
    public MapClient CustomerLocation { get; set; }
    public int NumberOfHours { get; set; }
    public string TypeOfMachine { get; set; }
    public List<MapClient> NearestSupplierList { get; set; }    
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}

Сигнальный концентратор

 public void RequestForHelp(RequestDetails requestDetails)
    {

        requestDetails.Customer =   Service.CustomerService.GetCustomerById(requestDetails.CustomerId);
Service.SupplierService.GetAspNetUserIDBySupplierID(requestDetails.NearestSupplierList[0].ClientId);

            Clients.User(supplierAspNetUserID).requestForHelpInClient(requestDetails);
    }

1 Ответ

1 голос
/ 30 октября 2019

Две быстрые перемены для вас.

  1. Вы используете метод GET. GET методы не могут передавать такие данные. Измените GET на POST как в контроллере, так и в ajax.

  2. Вам необходимо добавить тег [FromBody] в контроллере. В зависимости от того, какую версию MVC вы используете для связывания данных, это может быть очень требовательным.

Контроллер:

[HttpPost]
public ActionResult RequestPartialView([FromBody]RequestDetails reqDetails)
{
   // code here 
}

Ajax:

mapHub.client.requestForHelpInClient = function (requestDetails) {
    $.ajax({
        type: "POST",
        url: '@Url.Action("RequestPartialView", "Supplier")',
        data: requestDetails,
        success: function (response) {
            $("#Request").html(response);
        },
        error: function (error) {
            console.log(error);
        }
    });  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...