我在 MVC 4 中使用带有 Razor HTML 的 jquery ui 自动完成功能。我可以将它与硬编码值一起使用,但我想知道如何将它连接到数据库,以便不必对即将出现的值进行硬编码。
问问题
3041 次
2 回答
2
如果您使用的是 MVC4,那么您应该创建一个可以从视图访问的操作(呈现操作 url)。然后,您需要在设置自动完成 jquery 时将此 (url) 设置为源。
远程源的文档在这里。
对于 MVC,它看起来像这样:
$( "#birds" ).autocomplete({
source: "/MyController/OptionsAction",
minLength: 2,
select: function( event, ui ) {
log( ui.item ?
"Selected: " + ui.item.value + " aka " + ui.item.id :
"Nothing selected, input was " + this.value );
}
});
于 2013-03-24T23:03:14.963 回答
0
最好使用 MVC 的 @URL.Action 来确保正确编码 URL,即使您的视图是一到十个文件夹深。
在上面的示例中,“/MyController/OptionsAction”如果您将视图向下移动一个文件夹,@URL.Action 将继续工作,则该文件夹将不起作用。
注意ajax调用的格式是这样的:
- 发送数据:
url(您发布到的位置)
数据(您发布的数据)
类型(发出的请求类型:POST 或 GET 或 PUT。如果留空,则默认为 GET)
contentType(向服务器发送数据时使用的内容类型。除非必要,否则最好不要更改)
- 接收数据:
dateType(您期望返回的数据类型:在本例中为 json)
成功(请求成功时调用的函数)
$('#Country').autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("GetCountries", "User")',
data: "{ 'CountrySearch': '" + $('#Country').val() + "' }",
dataType: "json",
type: "POST",
contentType: 'application/json',
success: function (data) {
response($.map(data, function (item) {
return JSON.parse(item);
}))
},
error: function (jqXhr, textStatus, errorThrown) { alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')"); },
})
},
minLength: 1,
});
国家从这样的数据库调用中返回数据的地方:
{ "国家":"["澳大利亚", "奥地利", "加拿大", "美国"]" }
public JsonResult GetCountries(string CountrySearch)
{
string[] Countries = new AddressManager().GetCountries(CountrySearch);
string serialisedList = new JavaScriptSerializer().Serialize(Countries);
return new JsonResult { Data = new { Countries = serialisedList }, ContentEncoding = Encoding.UTF8, ContentType = "text/plain", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
于 2014-12-26T12:27:12.830 回答