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并监视发生了什么的图片