asp.net MVC 自动完成 Html.TextBoxFor

asp.net MVC autocomplete with Html.TextBoxFor

我正在修改一个已有的应用程序。我正在尝试添加 jquery 自动完成功能。我让它工作并调用控制器但问题是输入字段中的名称属性是 "someClass.someMethod" 所以因为我不能像这样将它放在控制器参数中,但仍然想要满足 asp.net的模型绑定规则,我该怎么办?

控制器:

        public JsonResult GetPs(string pN, PSModel pS)
    {
        List<string> pNs = null;

        pNs= pS.PEntryBL.BusinessLayerPS.PS
                      .Where(x => x.Text.StartsWith(pN)).Select(y => y.Text).ToList();

        return Json(pNs, JsonRequestBehavior.AllowGet);
    }

查看:

     $(function () {
         $("#autoCompletePNBox").autocomplete({
             source: '@Url.Action("GetPs", "PS", new {pS = @Model})'
         });
     });

形式:

            @Html.Label("Scan PN:   ", new { @class = "DFont"})

        @Html.TextBoxFor(r => r.PEntryBL.PS, new { @class = "pageFont", id = "autoCompletePNBox" }) 

使用This Post

我能够通过获取输入字段的值并在每次函数调用(或每次用户输入字符时)传递它来使其工作。

现在,当用户从自动完成列表中选择项目并选择提交时,幕后的框架表单模型绑定仍将按最初实现的方式工作。

这里是 jquery 代码更改:

      <script type="text/javascript">
          $(function () {
              var src = '@Url.Action("GetPs", "PS", new {pS = @Model})'
              $("#autoCompletePNBox").autocomplete({
                  source: function (request, response) {
                      $.ajax({
                          url: src,
                          dataType: "json",
                          data: {
                              pN: $("#autoCompletePNBox").val()
                          },
                          success: function (data) {
                              response(data);
                          }
                      });
                  }
              });
          });

我无法立即解决这个问题,因为我的 Jquery 技能不是很强。希望这对某人有帮助。