mvc 中的自动完成文本框

AutoComplate textbox in mvc

我有一个模型与另一个模型有关系。

   public class TurnRatings
{
    [Key]
    public int Id { get; set; }

    [ForeignKey("Referred")]
    public int ReferredId { get; set; }
    public virtual Referred Referred { get; set; }
 }

  public class Referred 
{
    [Key]
    public int Id { get; set; }
    public string Name{ get; set; }
    public string Family { get; set; }
 }

我想为 TurnRatings 添加一个视图。我想为显示引用添加一个自动完成文本框。

可见。

 <div class="form-group">
 @Html.LabelFor(m => m.ReferredId, new { @class = "control-label col-lg-1" })
 <div class="col-lg-3">
   @Html.HiddenFor(m=>m.ReferredId)
   @Html.TextBox("Referred")
   @Html.ValidationMessageFor(m => m.ReferredId)
 </div>
 </div>

和jquery

 $(document).ready(function () {
        var url = '@Url.Action("ListReferred", "TurnRatings")';
        $('#Referred').autocomplete({
            source: function(request, response) {
                $.ajax({
                    url: url,
                    data: { query: request.term },
                    dataType: 'json',
                    type: 'GET',
                    success: function(data) {
                        response($.map(data,
                            function(item) {
                                return {
                                    family: item.Family,
                                    id: item.Id
                                }
                            }));
                    }
                });
            },
            select:
                function(event, ui) {
                    $('#ReferredId').val(ui.item.id);
                    $('#Referred').val(ui.item.family);
                    return false;
                },
            minLength: 1
        });
    });

和控制器

  public JsonResult ListReferred(string term)
    {
        var list = _db.Referreds.Where(m => m.Family.Contains(term));
        return Json(list, JsonRequestBehavior.AllowGet);
    }

但不要为控制器发送术语值。(发送空值)

我的问题是: 这是一个好的解决方案吗? 为什么不为控制器发送数据?

您的关键是 wrong.You 必须在操作参数中写入查询。 控制器

public JsonResult SearcAnything(string term)
    {
        return Json(data.Where(s => s.Name.Contains(term)), JsonRequestBehavior.AllowGet);
    }

客户

 jQuery(document).ready(function () {
            jQuery('#Referred').autocomplete({
                source: function (request, response) {
                    jQuery.ajax({
                        url: '@Url.Action("SearcAnything","Home")',
                        dataType: "json",
                        data: {
                            term: request.term
                        },
                        success: function (data) {
                            response(data);
                        }
                    });
                },
                minLength: 3
            });

        });