控制器中的 MVC3 自动完成和开机自检方法

MVC3 Autocomplete and POST Method in Controller

本文关键字:开机自检 方法 MVC3 控制器      更新时间:2023-09-26

我得到了一个MVC Razor View页面作为人们输入详细信息并提交到数据库的表单。它使用下拉列表工作,但我想在表单中添加一个自动完成文本框。这工作正常,但是当回发到 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>

控制器:

 [HttpPost]
    public ActionResult Create(MappingModel view)
    {
        if (ModelState.IsValid)
        {
            var entity = new PersonContempancy();
            entity.PersonId = view.PersonId;
            entity.FrameworkId = view.FrameworkId;
            entity.ContempancyCategoryId = view.ContempancyCategoryId;
            entity.ContempancyId = view.ContempancyId;
            entity.ContempancyLevelId = view.ContempancyLevelId;
            entity.FrameworkLevelId = view.FrameworkLevelId;
            db.PersonContempancies.Add(entity);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }

        ViewBag.Contepancies = db.Contempancies.ToList();
        ViewBag.ContempancyCategory = db.ContempancyCategories.ToList();
        ViewBag.ContempancyLevel = db.ContempancyLevels.ToList();
        ViewBag.FrameworkLevel = db.FrameworkLevels.ToList();
        ViewBag.Person = db.People.ToList();
        ViewBag.Framework = db.Frameworks.ToList();

        return View();
    }
  public ActionResult AutocompleteSuggestions(string term)
    {
        var namelist = db.People.Where(c => c.PersonName.Contains(term)).Select(c => new { value = c.PersonId, label = c.PersonName}).Distinct().Take(10);
        return Json(namelist.ToArray(), JsonRequestBehavior.AllowGet);
    }

查看您的自动完成建议代码,在返回 JSON 时,您似乎只发回人名,而不是人的 ID。如果我理解正确,您需要同时返回姓名和 ID,并通过自动完成函数的选择函数中的 JQuery 设置人员 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);

     $("#searchTerm").val(ui.item.value.PersonName);
     $("#PersonID").val(ui.item.value.PersonID);