如何从数据库中获取记录并在下拉列表选择中填充文本框

时间:2017-11-09 21:40:20

标签: c# jquery ajax api asp.net-mvc-5

首先抱歉我的英语不好。 我是使用AJAX和API的新手,所以我真的不知道自己做错了什么。 我必须在选择下拉列表后填充一些文本框,让我们说我必须使用:姓名Last_Name年龄性别

我已经编写了一个ajax函数和一个工作正常的API(我在另一个视图上使用它来显示)然而我的ajax代码不起作用,它没有填充文本框,因为它'应该做的。 我尝试使用Chrome来解决请求问题,这是网址:

https://localhost:44397/api/pacient/21?id=21&_=1510262500793

根据我的说法,这个网址应该包含我的数据库记录的名称,但是我得到了两次我的用户名。

我的下拉列表:

<div class="col-md-4 form-group">
    @Html.LabelFor(m => m.Pacient)
    @Html.DropDownListFor(m => m.Pacient, new SelectList(Model.Pacient,"Id", "Name"), "--Select--", new { id = "pacientSelector", @class = "form-control" })
</div>

我的API控制器操作(使用自动映射):

    //GET /Api/pacient/1
    public IHttpActionResult GetPacient(int id)
    {
        var pacient = _context.Pacient.SingleOrDefault(p => p.Id == id);

        if (pacient == null)
            return NotFound();


        return Ok(Mapper.Map<Pacient, PacientDto>(pacient));
    }

我的AJAX功能:

        $('#pacientSelector').change(function() {
            var pacientId = $(this).val();
            $.ajax({
                url: '/api/pacient/' + pacientId,
                type: 'GET',
                async: true,
                cache: false,
                data: {id: pacientId},
                success: function(data, pacient) {
                    $("#textboxId").val = pacient.Name;
                }
            });
        });

1 个答案:

答案 0 :(得分:0)

您要发送id两次,一个是url中的查询字符串(通过显式将值连接到url )和data中的一个。由于您使用 GET 作为方法,因此jQuery $.ajax方法会将数据属性值作为查询字符串键值项附加到网址,因此您看到的值为2次。 但即使你发送了两次。您的api操作方法仍然可以从其中一个获取值。

如果网址中的重复值让您烦恼,只需删除它们即可。

$('#pacientSelector').change(function() {
    var pacientId = $(this).val();

    $.ajax({
        url: '/api/pacient/',              
        data: {id: pacientId}
    }).done(function(data) {
        console.log(data);
    });

});

现在要设置文本框值,您需要使用val()方法。还要确保您正在访问返回donesuccess处理程序的正确响应变量。

.done(function(data) {
    $("#textboxId").val(data.Name);
});

这应该可以使用假设响应对象具有Name属性。请注意,javascript 区分大小写。因此,如果您的Web API配置为返回小写,请使用data.name

您可以使用速记$.ajax来代替$.get来电,使其更加紧凑

$('#pacientSelector').change(function () {

    $.get('/api/pacient/' + $(this).val())
        .done(function (data) {
            $("#textboxId").val(data.Name);
        });
});