【问题标题】:Nested object values does not follow in parameter from ajax call to actionmethod嵌套对象值不遵循从 ajax 调用到 actionmethod 的参数
【发布时间】:2020-02-24 22:36:42
【问题描述】:

参数中的嵌套对象值不跟随。如何在控制器的 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);
                    }
                });                }

  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);
    }

【问题讨论】:

  • 你能把序列化的JSON如何存储在requestDetails中吗?
  • 什么意思?我添加了创建 requestdetails @user1672994 的 js 代码
  • 在服务器端代码中,CustomerIdCustomer 对象的一部分,但似乎在发送时,它是RequestDetails 的直接属性。客户端的 Json 是否应该遵循服务器 Model 类所需的架构?
  • 是的,customerid 既在客户中(在 requestDetails 中),又在 requestDetails 中是它自己的属性。我添加了一些可能有帮助的代码
  • 我没看到,你在 requestForHelp 方法中传递了 Customer 对象;这就是接收模型中对象的属性为空的原因。

标签: javascript c# ajax asp.net-mvc signalr


【解决方案1】:

为您提供两个快速更改。

  1. 您正在使用GET 方法。 GET 方法不能像那样传输数据。在控制器和 ajax 中将 GET 更改为 POST

  2. 您需要在控制器中添加[FromBody] 标签。根据您在数据绑定器上使用的 MVC 版本,可能会更加挑剔。

控制器:

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

阿贾克斯:

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);
        }
    });  
}

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2015-10-21
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2021-12-09
    相关资源
    最近更新 更多