微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 将对象从Ajax传递到C#WebApi

我还不能流利地调用WebAPI服务.我成功完成了简单的项目,但现在我的需求变得越来越复杂,事情总是失败.

我将MVC 5用于WebAPI,并使用常规jQuery函数调用.

我的模特

在这里,我管理一个诊所的病人预约.我对Patient和Appointment实体使用以下模型:

public class Patient
{
    // Personal data
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Appointment
{
    public int Id { get; set; }
    public DateTime Date { get; set; }      // date only
    public int Order { get; set; }
    public string PatientName { get; set; }

    // Parent data
    public Patient Patient { get; set; }
    public int PatientId { get; set; }

    public Organization Organization { get; set; }
    public int OrganizationId { get; set; }
}

我的DTO

public class AppointmentDto
{
    public int Id { get; set; }
    public int Order { get; set; }
    public string PatientName { get; set; }

    public PatientDto Patient { get; set; }
}

public class PatientDto
{
    public string Name { get; set; }
}

一个案例

我想在一天内为约会设定新的订购.我发送JSON对象列表,其中包含要更改的约会ID和各自的订单.

服务行动:

    [HttpPost]
    public IHttpActionResult UpdateOrder(List<AppointmentDto> dto)
    {
        _unitOfWork.Appointments.UpdateOrder(dto);
        _unitOfWork.Complete();

        return Ok();
    }

服务电话:

// Handler methods
var rearrangeAppointments = function (event, ui) {
    // Json object to pass
    var orderedAppointments = [];

    // Looping through appointments
    var i = 0;
    $("#sortable").children().each(function () {
        // Set new order
        i++;
        orderedAppointments.push({ "Id": this.getAttribute("data-id").toString(), "Order": i.toString() });
    });

    // Call service
    appointmentsService.updateOrder(orderedAppointments, done, fail);
};

var updateOrder = function (orderedAppointmens, done, fail) {
    $.ajax({
        url: "/api/appointments",
        method: "POST",
        data: orderedAppointmens,
        dataType: "Json"
    })
    .done(done)
    .fail(fail);
};

服务成功调用,但传递的列表始终为空.我调试了JavaScript代码,并成功构建了JSON对象数组.还调试了MVC代码并测试了Postman服务,它工作得很好.此下拉将对象列表从客户端传递到服务器.

第二个案例

这次是接听电话.我希望获得列表,如果约会是否有更新视图的特定日期.

服务行动:

    public IEnumerable<AppointmentDto> GetAppointments(DateTime date)
    {
        var organizationId = _unitOfWork.ApplicationUsers.GetorganizationId(User.Identity.GetUserId());
        var appointments = _unitOfWork.Appointments.GetAppointments(date, organizationId);

        return appointments.Select(Mapper.Map<Appointment, AppointmentDto>);
    }

服务电话:

        $("#datepicker").datepicker({
            // Todo: Refactor to pettern
            onSelect: function (dateText, inst) {
                var selectedDate = $(this).datepicker('getDate');
                var date = JSON.stringify(selectedDate);

                $.ajax({
                    contentType: 'application/json; charset=utf-8',
                    dataType: "json",
                    url: "/api/appointments",
                    data: date,
                    success: function (appointments) {
                        alert("Service call succeeded!")
                        alert(appointments.length);
                    }
                })
                .fail(function () {
                    alert("Failure!");
                });
            }
        });

当我在没有传递日期的情况下测试代码(将日期硬编码到action方法中)时,它的效果非常好.当我向参数添加日期时(在action方法和AJAX调用中),它根本不起作用.

我从这里和其他来源尝试了许多链接文章但没有成功,如下所示:
Pass a datetime from javascript to c# (Controller)
Pass Date Values from Ajax Call to MVC
还有更多我不能在这里添加.

我认为在传递数据的两种情况下我的主要问题.
在这里错过了什么?

解决方法:

对于第二种情况:你发送日期时间??如果您这样做,URL可能包含“:”(12:00)& HTTP请求拒绝此类型的字符

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐