【问题标题】:ASP.Net MVC + Autocomplete Search not workingASP.Net MVC + 自动完成搜索不起作用
【发布时间】:2016-05-13 09:23:28
【问题描述】:

我是初学者,我正在尝试使用 ASP.Net MVC 5 开发一个自动完成搜索框。我使用 Northwind 数据库和实体框架 6。

这是我的 index.cshtml 代码

@model IEnumerable<AutoComplete3.Models.Customers>

<link href="~/Content/jquery-ui.css" rel="stylesheet" />
<script type="text/javascript" src="~/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript" src="~/Scripts/jquery-ui.js"></script>

<script type="text/javascript">
    $(function () {
        $("#txtSearch").autocomplete({
            source: '@Url.Action("GetCustomers")'
        });
    });
</script>

@using (@Html.BeginForm())
{
    <b>Name : </b>
    @Html.TextBox("searchTerm", null, new { @id = "txtSearch" })
    <input type="submit" value="Search" />
}

这是我的 CustomerController 类

public class CustomersController : Controller
{
    northwindEntities db = new northwindEntities();

    public ActionResult Index()
    {
       return View(db.Customers);
    }

    [HttpPost]
    public ActionResult Index(string SearchTerm)
    {
        List<Customers> customers;
        if (string.IsNullOrEmpty(SearchTerm))
        {
            customers = db.Customers.ToList();
        }
        else
        {
            customers = db.Customers.Where(c => c.CompanyName.StartsWith(SearchTerm)).ToList();
        }
        return View(customers);
    }       

    public JsonResult GetCustomers(string term)
    {
        List<string> customers;
        customers = db.Customers.Where(c => c.CompanyName.StartsWith(term)).Select(y => y.CompanyName).ToList();
        return Json(customers,JsonRequestBehavior.AllowGet);
    }
}

当我通过输入关键字并单击提交按钮搜索记录时,此代码正在工作。但是 jquery 脚本不能调用 GetCustomer 方法。检查元素显示以下错误。

Uncaught TypeError: $(...).autocomplete is not a function

文本框应向文本框本身建议公司名称。如何纠正这个问题。

谢谢。

【问题讨论】:

  • 您是否正确添加了 jQuery?在浏览器中查看渲染页面 ViewSource。
  • 根据错误消息,您没有正确加载 jQuery 或其插件
  • 我尝试通过关注this 视频来做到这一点。这就是我将 Jquery 添加到我的视图的方式 错了吗?
  • 将你的脚本标签移动到页面底部

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


【解决方案1】:

Javascript

    $(document).ready(function () {
        $("#txtSearch").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: '@Url.Action("GetCustomers","Home")',
                    type: "POST",
                    dataType: "json",
                    data: { searchTerm: request.term },
                    success: function (data) {
                        response($.map(data, function (item) {
                            return { label: item.CompanyName, value: item.CompanyName };
                        }))

                    }
                })
            },
            messages: {
                noResults: "", results: ""
            },
        });
    })

查看

@using (@Html.BeginForm())
{
    <b>Name : </b>
    @Html.TextBox("searchTerm", null, new { @id = "txtSearch" })
    <input type="submit" value="Search" />
}

控制器

请使用 [HttpPost] 更新您的控制器

    [HttpPost]
    public JsonResult GetCustomers(string searchTerm)
    {
    List<string> customers;
    customers = db.Customers.Where(c => c.CompanyName.StartsWith(term)).Select(y => y.CompanyName).ToList();
    return Json(customers,JsonRequestBehavior.AllowGet);
  }

【讨论】:

  • 相同的输出。我将其更改如下。
  • 好的,请稍等,我会更新我的答案并给你适当的解决方案。
  • 谢谢@Banwari。我按照这个视频开发了这个应用程序。 [youtube.com/watch?v=quQgUNteWxY]
  • 嗨...@Chamith 请使用我上面的更新答案,它工作正常..可能是它有一些设计问题。
  • @Banvari,我试过你的代码。我在控制器方法 (GetCustomer) 中放置了一个断点并运行该项目。但是视图页面不调用Controller方法。那里有什么问题?
猜你喜欢
  • 2017-09-16
  • 1970-01-01
  • 2021-04-26
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多