在我们的 MVC 应用程序中,我们在几个页面上使用 jQuery 自动完成控件。这工作正常Create
,但我不能让它工作Edit
。
实际上,我不知道如何使自动完成控件从模型中预加载数据,并且在用户想要更改值的情况下仍然表现为自动完成。
另外,如何确保该值以与Create
调用中使用的相同格式显示?
我们所有的自动完成控件都有对应的控制器,并且都解析 Json 结果。
在我们的 MVC 应用程序中,我们在几个页面上使用 jQuery 自动完成控件。这工作正常Create
,但我不能让它工作Edit
。
实际上,我不知道如何使自动完成控件从模型中预加载数据,并且在用户想要更改值的情况下仍然表现为自动完成。
另外,如何确保该值以与Create
调用中使用的相同格式显示?
我们所有的自动完成控件都有对应的控制器,并且都解析 Json 结果。
让我们试试这个!好吧 这样做:假设您有一个需要过滤的国家/地区列表 自动完成默认情况下知道如何处理一些默认内容,但假设您真的想要 CountryName 并且您知道每个按键都会对您指定的 URL 进行 ajax 调用。像这样创建一个动作方法:
public ActionResult LookupCountry(string q, int limit)
{
var list = GetListOfCountries(q, 0, limit);
var data = from s in list select new {s.CountryName};
return Json(data);
}
这是jQuery:
$(document).ready( function() {
$('#txtCountryName').autocomplete('<%=Url.Action("LookupCountry", "MyController") %>', {
dataType: 'json',
parse: function(data) {
var rows = new Array();
for(var i=0; i<data.length; i++){
rows[i] = { data:data[i], value:data[i].CountryName, result:data[i].CountryName};
}
return rows;
},
formatItem: function(row, i, n) {
return row.CountryName;
},
width: 300,
mustMatch: true,
});
});
这是HTML
<html><head></head><body>@Html.TextBox("txtCountryName",Model.CountryName)</body></html>
基本上,神奇之处在于对 LookUpCountry 的调用 GetCountriesList(string query, int startindex, int limit) 返回MyCountries.Where(c => c.CountryName.SubString(startindex, limit).Contains(query)).ToList();
因此,您正在制作自己的修剪功能,因为 JQuery 不知道 CountryName 是什么或如何修剪它。如果它是一个 javascript 对象,我不太确定,但确实如此
var jsonString = @Html.GetListOfCountries() //Or Model.Countries.ToJSONString()
var json = JSON.stringify(jsonString); //also JSON.Parse(jsonString) if stringify won't work
这将返回必要的国家作为 Html Helper Extension 方法。也许作为一个 javascript 对象的列表,它会足够聪明地用它的本地语言来处理它。然而,第一种方法对我有用。