如何从自动完成而不是文本发布值?
问题描述:
这是我的C#代码:如何从自动完成而不是文本发布值?
public JsonResult FillUsers(string term)
{
var Retailers = from us in db.Users
join pi in db.UserPersonalInfoes on us.ID equals pi.UserID into t
from rt in t.DefaultIfEmpty()
where us.Status == true
select new
{
ID = us.ID,
Username = us.Username + ":(" + (rt == null ? String.Empty : rt.FirstName) + ")"
};
List<string> UsersList;
UsersList = Retailers.Where(x => x.Username.Contains(term)).Select(y => y.Username).Take(10).ToList();
return Json(UsersList, JsonRequestBehavior.AllowGet);
}
HTML代码:
<div class="col-md-3">
@Html.TextBox("ddlUser", null, new { @id = "ddlUser", @class = "form-control" })
</div>
JavaScript代码:
<script type="text/javascript">
$(function() {
$("#ddlUser").autocomplete({
source: '@Url.Action("FillUsers", "FirebaseNotification")',
select:function(event, ui)
{
var id = ui.item.ID;
var name = ui.item.Username;
}
});
});
我想显示在文本字段 '用户名',但是当形式将岗位我想发送'身份证'。而不是我得到的用户名。
答
为了实现这一目标可能需要您在其中存储的时候作出选择的ID附加隐藏字段:
$("#ddlUser").autocomplete({
source: '@Url.Action("FillUsers", "FirebaseNotification")',
select: function(event, ui) {
var id = ui.item.ID;
$('#selectedUserId').val(id);
}
});
现在,当提交表单时,你会忽略username
值从文本未来场,而是采取了隐藏字段值:
@Html.Hidden("selectedUserId", null, new { id = "selectedUserId" })
答
$("#ddlUser").keyup(function (e) {
if (e.which != 13) {
$("#hfUserID").val("0");
}
$("#ddlUser").autocomplete({
source: function (request, response) { ... },
select: function (e, i) {
$("#hfUserID").val(i.item.val);
$("#ddlUser").val(i.item.label);
},
minLength: 1
});
});
您可以使用隐藏字段来保存该用户ID – Kathir07
为什么不使用组合框? https://jqueryui.com/autocomplete/#combobox。因为不像