C# 使用jQuery使用外键自动完成

C# 使用jQuery使用外键自动完成,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我有一份申请书,是关于教堂房屋捐赠的。我希望在教堂收到捐款时,有人会在一个文本框中输入地址,但由于会有很多家庭,我希望有一个自动完成框,使之更容易 以下是我的模型: public class Donation { [Key] public int DonationId { get; set; } public string TypeOfDonation { get; set; } public decimal Amount { get; set; }

我有一份申请书,是关于教堂房屋捐赠的。我希望在教堂收到捐款时,有人会在一个文本框中输入地址,但由于会有很多家庭,我希望有一个自动完成框,使之更容易

以下是我的模型:

 public class Donation
{
    [Key]
    public int DonationId { get; set; }

    public string TypeOfDonation { get; set; }

    public decimal Amount { get; set; }

    [ForeignKey("Church")]
    public int ChurchId { get; set; }

    [ForeignKey("House")]
    public int HouseId{ get; set; }

    public virtual Church Church { get; set; }
    public virtual House House { get; set; }

}

public class House
{
    [Key]
    public int HouseNumber { get; set; }

    public string AddressLine1 { get; set; }

    public string AddressLine2 { get; set; }

    public string AddressLine3 { get; set; }

}
我认为我的控制器方法有问题:

public JsonResult GetAddress(string term)
    {
        var items = db.Houses
            .Where(x => x.AddressLine1.Contains(term))
            .Select(x => new { Label = x.HouseNumber, Value = x.AddressLine1 })
            .Take(10);

        return Json(items, JsonRequestBehavior.AllowGet);
    }
或者我的jQuery:

 <div class="form-group">
        @Html.LabelFor(model => model.House.HouseNumber, "Address", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
           @Html.TextBoxFor(m => m.House.HouseNumber, new { id = "HouseNumber" })
           @Html.ValidationMessageFor(model => model.House.HouseNumber, "", new { @class = "text-danger" })
        </div>
    </div>

$('#Address').autocomplete({
source: function(request, response) {
    $.get('@Url.Action("GetAddress", "DonationsController")',
        { term: request.term },
        function(data) {
            response($.map(data, function (item) {
                return {
                    label: item.Label,
                    value: item.Value
                }
            }));
        });
},
minLength: 2
})

@LabelFor(model=>model.House.HouseNumber,“Address”,htmlAttributes:new{@class=“controllabel col-md-2”})
@TextBoxFor(m=>m.House.HouseNumber,新的{id=“HouseNumber”})
@Html.ValidationMessageFor(model=>model.House.HouseNumber,“,new{@class=“text danger”})
$(“#地址”)。自动完成({
来源:功能(请求、响应){
$.get('@Url.Action(“GetAddress”,“DonationsController”),
{term:request.term},
功能(数据){
响应($.map)(数据、功能(项){
返回{
标签:项目。标签,
值:item.value
}
}));
});
},
最小长度:2
})
谁能给我指出正确的方向吗

编辑:
您的屏幕截图显示了问题所在

在MVC中创建URL时,即使控制器类被称为
DonationsController

换成

  $.get('@Url.Action("GetAddress", "Donations")',

我刚刚用jqueryui创建了一个autocomplete,这个例子可能会有所帮助

jQuery

$("#txtCode").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: '@Url.Action("ProductAutocompleteByCode", "Products")',
                dataType: 'json',
                data: {
                    codigo: $("#txtCode").val()
                },
                success: function (data) {
                    var parsedData = $.map(data, function (n, i) {
                        return { label: n.Code, value: n.Id };
                    });
                    response(parsedData);
                }
            });
        }
    });
控制器

 public JsonResult ProductAutocompleteByCode(string code)
    {
        var products = Json(db.Products.Where(p => p.code.Contains(code)).Select(p => new ProductDTO { Id = p.id, Code = p.code, Name = p.name, Price= p.price }));

        return Json(products.Data, JsonRequestBehavior.AllowGet);
    }

请解释一下。问题是什么?我的问题是,当我键入一个应该在数据库@buffjapeh中的地址时,没有加载任何内容。您是否查看了浏览器的网络检查器工具中的请求/响应周期?您能用您正在使用的jquery库的信息更新这个问题吗?(看起来像jquery用户界面)你在服务器端附加了一个调试器并通过了吗?@Charlie我添加了当我按下f12并监视发生了什么的图片