jquery - 在 MVC 中创建两个甚至更多的自动完成下拉列表
问题描述
我想在桌面应用程序中创建类似于组合框的自动完成文本框,所以当我输入一个字母时,它必须向我显示一些您可以选择的数据列表。存在一个名为“Purchase”的数据库,因此我创建了两个操作让控制器中的两个表获取数据并像这样显示它们:
[HttpPost]
public JsonResult AutoComplete(string prefix)
{
var customers = (from customer in db_Purchase.tbl_Customer
where customer.Customer_Name.StartsWith(prefix)
select new
{
label = customer.Customer_Name,
val = customer.Customer_Code
}).ToList();
return Json(customers);
}
以及与 Products 表相关的其他操作:
[HttpPost]
public JsonResult AutoComplete_Product(string term)
{
var products = (from product in db_Purchase.tbl_Product
where product.Proc_Name.StartsWith(term)
select new
{
lable = product.Proc_Name,
val = product.Proc_Code
}).ToList();
return Json(products);
}
在视图中使用 html.beginform 我编写了我的 html 代码而不发送模型
@using (Html.BeginForm("Index", "Order", FormMethod.Post, new { @class = "form-inline" }))
{
<div class="form-group">
<label for="txtCustomer">Customer Name:</label>
<input type="text" id="txtCustomer" name="CustomerName" class="form-control" />
</div>
<div class="form-group">
<input type="hidden" id="hfCustomer" name="CustomerCode" />
</div>
<div class="form-group">
<label for="txtProduct">Product Name:</label>
<input type="text" id="txtProduct" name="ProductName" class="form-control" />
</div>
<div class="form-group">
<input type="hidden" id="hfProduct" name="ProductCode" />
</div>
}
之后,在两个 jquery 函数中,我填写了两个文本框,这些代码如下片段:
<script>
$(function () {
$("#txtCustomer").autocomplete({
source: function (request, response) {
$.ajax({
url: '/Order/Order/AutoComplete',
data: "{ 'prefix': '" + request.term + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
response($.map(data,
function (item) {
return item;
}));
},
error: function (response) {
alert(response.responseText);
},
failure: function (response) {
alert(response.responseText);
}
});
},
select: function (e, i) {
$("#hfCustomer").val(i.item.val);
},
minLength: 0
}).focus(function () {
$(this).autocomplete("search");
});
});
$(function() {
$("#txtProduct").autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("AutoComplete_Product","Order")',
data: "{ 'term': '" + request.term + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
response($.map(data,
function (item) {
return item;
}));
},
error: function (response) {
alert(response.responseText);
},
failure: function (response) {
alert(response.responseText);
}
});
},
select: function (e, i) {
$("#hfProduct").val(i.item.val);
},
minLength: 0
}).focus(function () {
$(this).autocomplete("search");
});
});
</script>
第一个代码,我的意思是客户代码有效,但第二个无效。它没有显示任何错误,也没有填充产品文本。像“term”、“prefix”、“val”这样的词吗?和 Actions 中的“label”在 jquery 代码中应该是相同的名称,或者它们可以有不同的名称?有人可以帮我说我的第二个 Jquery 代码有一些错误吗?
解决方案
推荐阅读
- java - Jax rs 控制器设置上传文件大小限制
- spring-integration - 为每个 Ftp 文件同时运行 Spring Integration 流程
- css - 如何禁用按钮单击样式css
- angular - Angular - 订阅中的函数从未在单元测试中调用
- reactjs - CustomHook -> useDispach = 找不到 react-redux 上下文值;请确保组件被包裹在一个
- reactjs - 打字稿没有捕捉到错误类型的道具
- continuous-integration - 如何有条件地运行 CI 阶段
- python - 如何替换列表中不需要的字符额外引号
- java - Spring Boot 无法自动装配
- scala - 写入时 Spark Merge 模式 - 出现错误:“现有表的列号与数据不匹配