Fel*_*ogo 0 asp.net-mvc jquery
我想知道发布外键的最佳做法.
我有这个模型.
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;}
}
Run Code Online (Sandbox Code Playgroud)
现在在我的城市View中,我想有一个下载,不会在第一次加载时加载所有国家,但我想做某种自动完成,然后我看到了JQuery的自动完成方法,但是我不知道如何在我的模型中绑定它.
有人可以给我一些建议吗?
您需要在View中提供的所有内容都是文本框,例如:
@Html.TextBoxFor(m => m.Country.Id, new { id="CountryId" })
Run Code Online (Sandbox Code Playgroud)
在我进一步讨论之前,我假设你的Description属性可能是一个Name属性,而在英语中,使用Description意思Name是有点误导.
使用JQuery,您需要做两件事,首先,您需要将自动完成功能附加到文本框中:
$('#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
})
Run Code Online (Sandbox Code Playgroud)
该response函数是一个自动完成回调函数,可以执行一些操作,这些文档都在这里.
当您有一个自动完成时,此方法有效,但如果您的页面上有多个自动完成,或者只想编写一个脚本以在您需要的每个输入上附加自动完成,则可以使用类似于此的内容:
@Html.TextBoxFor(m => m.Description, new {
data-autocomplete-url = @Url.Action("GetCountries", "MyController" })
Run Code Online (Sandbox Code Playgroud)
使用这个JQuery:
$('*[data-autocomplete-url]')
.each(function () {
$(this).autocomplete({
source: function(request, response) {
$.get($(this).data("autocomplete-url"), ...);
});
});
Run Code Online (Sandbox Code Playgroud)
最后,控制器中的action方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
context你的存储库在哪里 在你的情况下,我认为它是一个实体框架DbContext.该.Take()方法将指示将多少值发送回客户端,保持此数字较低可能有助于自动完成的反应性,但不会为短搜索术语返回大的结果集.
如上所述,您应该尝试确保您的变量具有详细的名称.
这里还有一个来源与您正在做的事情没有直接关系,但可能派上用场.
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |