使用ASP.NET MVC和JQuery自动完成发布外键?

时间:2015-03-16 14:22:02

标签: jquery asp.net-mvc

我想知道发布外键的最佳做法。

我有这个模型。

public class Country {
    public int Id {  get;  set;}
    public int Description {  get;  set;}
}
Public class City {
    public int Id{get; set;}
    public string Description{get; set;}
    public Country Country {get; set;}
}

现在在我的城市视图中,我想要在第一次加载时不会加载所有国家/地区的下拉列表,但我想做某种自动完成,然后我看到了JQuery自动完成的方法,但我不知道如何在我的模型中绑定它。

有人可以给我一些建议吗?

1 个答案:

答案 0 :(得分:6)

查看

您需要在视图中提供的所有内容都是文本框,例如:

@Html.TextBoxFor(m => m.Country.Id, new { id="CountryId" })

在我继续前进之前,我假设您的Description属性可能是Name属性,并且使用英语,Description表示{ {1}}有点误导。

JQuery的

使用JQuery,您需要做两件事,首先,您需要将自动填充功能附加到文本框中:

Name

$('#CountryId').autocomplete({ source: function(request, response) { $.get('@Url.Action("GetCountries", "MyController")', { term: request.term }, function(data) { response($.map(data, function (item) { return { label: item.Label, value: item.Value } })); }); }, minLength: 2 }) 函数是一个自动完成回调函数,可执行一些操作docs for which are here

当您有一个自动填充功能时,此方法有效,但如果您的网页上有多个自动填充功能,或者只想编写一个脚本以在您需要的每个输入上附加自动填充功能,you can use something similar to this

response

使用这个JQuery:

@Html.TextBoxFor(m => m.Description, new { 
    data-autocomplete-url = @Url.Action("GetCountries", "MyController" })

控制器

最后,控制器中的操作方法:

$('*[data-autocomplete-url]') 
    .each(function () { 
        $(this).autocomplete({ 
            source: function(request, response) {
                $.get($(this).data("autocomplete-url"), ...);
        });
    });

其中public JsonResult GetCities(string term) { var items = context.Cities .Where(x => x.Description.Contains(term)) .Select(x => new { Label = x.Id, Value = x.Description }) .Take(10); return Json(items, JsonRequestBehaviour.AllowGet); } 是您的存储库。在您的情况下,我假设它是一个实体框架contextDbContext方法将指示将多少值发送回客户端,保持此数字较低可能有助于自动完成的反应性,但不会为短搜索术语返回大的结果集。

如上所述,您应该尝试确保您的变量具有详细的名称。

One more source here that isn't directly relatable to what you're doing, but may come in handy.