C# 控制器中的MVC3自动完成和POST方法

C# 控制器中的MVC3自动完成和POST方法,c#,javascript,asp.net-mvc,autocomplete,C#,Javascript,Asp.net Mvc,Autocomplete,我得到了一个MVC Razor视图页面,作为人们输入详细信息并提交到数据库的表单。 它使用dropdownlist工作,但我想在表单中添加一个自动完成文本框。 但是,当发回POST控制器时,它会始终将该人员的ID设置为0。有什么想法吗 谢谢 Javascript: script type="text/javascript"> $(document).ready(function () { $("#PersonName").autocomplete({

我得到了一个MVC Razor视图页面,作为人们输入详细信息并提交到数据库的表单。 它使用dropdownlist工作,但我想在表单中添加一个自动完成文本框。 但是,当发回POST控制器时,它会始终将该人员的ID设置为0。有什么想法吗

谢谢

Javascript:

 script type="text/javascript">

   $(document).ready(function () {
        $("#PersonName").autocomplete({
            source: '@Url.Action("AutocompleteSuggestions")',
            minLength: 2,

            select: function (event, ui) {
                if (ui.item) {
                    $("#PersonName").val(ui.item.label);
                    $("#PersonId").val(ui.item.value);
                }
            }
        });
    });
</script>

查看AutoCompleteSuggestions代码,返回JSON时似乎只返回人名,而不是人名id。如果我理解正确,您需要返回姓名和ID,并在自动完成函数的select函数中通过JQuery设置person ID。它应该大致如下所示:

var namelist = (from c in db.People where c.PersonName.Contains(term) select new { c.PersonName, c.PersonID}).Distinct().Take(10).ToArray();
return Json(namelist.ToArray(), JsonRequestBehavior.AllowGet);


PersonID与自动完成功能有何关联?idCat是否代表PersonID?抱歉,忽略idCat我删除了它,因为测试失败。PersonId用于从数据库中获取自动完成的用户列表。它将其发送到控制器中的自动完成方法。你想让我也发布这个方法吗?我需要将ID传递给控制器中的模型,以便它可以发布到数据库。是的,这将非常有用。信息越多越好..完成:将其添加到控制器代码的底部。好的,谢谢,明天将尝试。我确实查看了堆栈,发现它发送了两次名称,而我需要发送名称和id。只是一个更新,这会破坏自动完成。当我对脚本进行更改时,我没有得到任何建议。我得到了将ID和名称发送到JS的方法,但无论我使用什么标签,自动完成都会建议正确的名称,但只要我点击名称,它就会将文本框改为ID。添加了更新的代码。当您在select函数中设置调试器并查看ui.item的内容时,您会看到什么?我看到标签是persons name,值是persons ID,因为它应该工作。我从来没有做过这么困惑如何选择它。我们的问题是,如果我注释掉select函数变量,那么它仍然有效。
var namelist = (from c in db.People where c.PersonName.Contains(term) select new { c.PersonName, c.PersonID}).Distinct().Take(10).ToArray();
return Json(namelist.ToArray(), JsonRequestBehavior.AllowGet);
     $("#searchTerm").val(ui.item.value.PersonName);
     $("#PersonID").val(ui.item.value.PersonID);