如何从自动完成而不是文本发布值?

问题描述:

这是我的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; 
     } 
     }); 
    }); 

我想显示在文本字段 '用户名',但是当形式将岗位我想发送'身份证'。而不是我得到的用户名。

+0

您可以使用隐藏字段来保存该用户ID – Kathir07

+0

为什么不使用组合框? https://jqueryui.com/autocomplete/#combobox。因为不像显示文本是值。

为了实现这一目标可能需要您在其中存储的时候作出选择的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 
 
              
 
    }); 
 
    });