【问题标题】:Autocomplete Ajax asp.net MVC, Display text自动完成 Ajax asp.net MVC,显示文本
【发布时间】:2018-09-21 17:44:23
【问题描述】:

我正在使用带有Ajax AutoComplete 的Jquery 来返回一些数据,但我有点卡在显示文本上。 这就是我所拥有的:

<script type="text/javascript">
$(document).ready(function () {
    $("#locais").autocomplete({
    source: function (request, response) {
            $.ajax({
                url: '@Url.Action("CreateF")',
                datatype: "json",
                data: {

                    s_localidade: request.term
                },
                success: function (data) {
                    response($.map(data, function (item) {
                        return {
                            label: item.remetente,
                            value: item.ID,
                        }
                    }))
                }
            })
        },
    });
});

在控制器上:

   public JsonResult CreateF(string s_localidade)
    {
        var tblOficiosExpedidos = db.tblOficiosExpedidos.Include(t => t.tblLocalidades);
        var local = (from r in db.tblLocalidades
                     where r.Remetente.Contains(s_localidade.ToUpper())
                     select new { remetente = r.Remetente + " - " + r.Cidade, ID = r.LocalidadeID }).ToList();
         return Json(local, JsonRequestBehavior.AllowGet);

    }

在视图中:

@Html.TextBox("LocalidadeID","", htmlAttributes: new { @class = "form-control", @id="locais"})

它确实有效,但是当我选择一个项目时,文本框的文本成为我表中的键号。有没有办法当我选择某些东西时,文本保留为 item.remetente 但将 item.ID 的数量保存到表中?

【问题讨论】:

  • 您需要在视图中为 ID 属性设置一个单独的隐藏输入,并在自动完成 select 事件中设置该输入的值(例如,请参阅 this answer 跨度>

标签: c# jquery ajax asp.net-mvc-5 asp.net-ajax


【解决方案1】:

您可以在'select' 的帮助下完成 试试下面的方法

你的看法

@Html.TextBox("LocalidadeID","", htmlAttributes: new { @class = "form-control", @id="locais"})
@Html.Hidden("hiddenlocais")

在您的 jquery 中定义将隐藏和文本框 id 作为参数的通用函数

jQuery:

function WireUpAutoComplete(displayControlId, valueControlId)
 {
  $(displayControlId).autocomplete({
    source: function (request, response) {
            $.ajax({
                url: '@Url.Action("CreateF")',
                datatype: "json",
                data: {
                    s_localidade: request.term
                },
                 select: function (event, ui) {
                      $(displayControlId).val(ui.item.Remetente);
                      $(valueControlId).val(ui.item.ID);
                    return false;
               },  
                success: function (data) {
                    response($.map(data, function (item) {
                        return {
                            label: item.remetente,
                            value: item.ID,
                        }
                    }))
                }
            })
        },
    });

  }

document ready调用上面的函数

<script type="text/javascript">
$(document).ready(function () {
  WireUpAutoComplete("#locais", "#hiddenlocais");
});

</script>

希望这能解决您的问题。我没有测试过。如果您遇到任何问题,请告诉我

【讨论】:

  • 我已经尝试过您的选择,将 1 个错字从“Remetente”修复为“remetente”,但仍然不起作用,我无法弄清楚哈哈。我也把 id="hiddenlocais"... 它仍然返回 item.ID 上的#locais 和 #hiddenlocais 不假定一个值。无论如何,至少现在我知道从哪里开始,您的回答很有帮助。谢谢:D
  • 很遗憾,它的工作原理是这样的,当我选择项目时,文本框会显示 ID 号,而 Hiddenlocais 不承担任何值。
  • 你调试了吗?在选择.. ui.item.ID 的值是什么? $(valueControlId).val(ui.item.ID);
猜你喜欢
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多