【发布时间】:2015-04-07 23:20:08
【问题描述】:
我的 _layout 视图中呈现了以下脚本:-
$(document).ready(function () {
$("input[data-autocomplete-source]").each(function () {
var target = $(this);
target.autocomplete({
source: target.attr("data-autocomplete-source"),
minLength: 1,
delay: 1000
});
});
});
我添加了以下字段以对其应用自动完成功能:-
<input name="term" type="text" data-val="true"
data-val-required= "Please enter a value."
data-autocomplete-source= "@Url.Action("AutoComplete", "Staff")" />
现在如果我将视图渲染为部分视图,那么脚本将不会触发,并且不会执行自动完成,所以我在 ajax-success 中添加了自动完成,如下所示:-
$(document).ready(function () {
$(document).ajaxSuccess(function () {
$("input[data-autocomplete-source]").each(function () {
var target = $(this);
target.autocomplete({
source: target.attr("data-autocomplete-source"),
minLength: 1,
delay: 1000
});
});
});
});
现在添加AjaxSuccess 后,将调用操作方法,当我检查 IE F12 开发人员工具上的响应时,我可以看到浏览器将收到 json 响应,但字段内不会显示任何内容(我的意思是自动完成结果不会显示在局部视图上)?
编辑
负责自动完成的动作方法是:-
public async Task<ActionResult> AutoComplete(string term)
{
var staff = await unitofwork.StaffRepository.GetAllActiveStaff(term).Select(a => new { label = a.SamAccUserName }).ToListAsync();
return Json(staff, JsonRequestBehavior.AllowGet);
}
EDIT2
这是负责显示模式弹出窗口的脚本:-
$(document).ready(function () {
$(function () {
$.ajaxSetup({ cache: false });
//$("a[data-modal]").on("click", function (e) {
$(document).on('click', 'a[data-modal]', function (e){
$('#myModalContent').css({ "max-height": screen.height * .82, "overflow-y": "auto" }).load(this.href, function () {
$('#myModal').modal({
//height: 1000,
//width: 1200,
//resizable: true,
keyboard: true
}, 'show');
$('#myModalContent').removeData("validator");
$('#myModalContent').removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse('#myModalContent');
bindForm(this);
});
return false;
});
});
function bindForm(dialog) {
$('form', dialog).submit(function () {
$('.btn.btn-primary,.btn.btn-danger').prop("disabled", "disabled");
$('#progress').show();
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
if (result.ISsuccess) {
$('#myModal').modal('hide');
$('#progress').hide();
$('.btn.btn-primary,.btn.btn-danger').prop("disabled", false);
location.reload();
// alert('www');
} else {
$('#progress').hide();
$('#myModalContent').html(result);
$('.btn.btn-primary,.btn.btn-danger').prop("disabled", false);
bindForm();
}
}
});
}
else {
$('.btn.btn-primary,.btn.btn-danger').prop("disabled", false);
$('#progress').hide();
return false;
}
return false;
});
}
});
【问题讨论】:
-
你能展示你的
AutoComplete控制器方法吗? -
@teovankot 我添加了相关的操作方法
-
我打赌我找到了你的问题,你可以看到答案更新
-
在所有更新之后,您是否尝试将自动完成添加代码放入
load方法中?最好使用$.ajax来获取数据,因为load的工作方式有点不同,但是如果您使用load,请在加载completecallback 中添加您的自动完成代码,然后看看发生了什么。 -
但确定我明白你的意思吗???我到底需要在哪里使用负载?
标签: asp.net-mvc asp.net-mvc-4 razor autocomplete asp.net-mvc-5