将具有自动完成功能的脚本连接到我的Json控制器时遇到问题。该视图是一个公式,用户可以在其中插入数据,例如带有datepicker函数的日期以及用于描述问题的通用文本。整个公式如下:

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)


所有文本框,DropDownList和编辑器都按以下方式连接到模型:

<div class="editor-label">
        @Html.LabelFor(model => model.Overview)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Overview)
        @Html.ValidationMessageFor(model => model.Overview)
    </div>


目前,我尝试插入“文本框”,其中自动完成应如下所示:

 <b>Name: </b>
     @Html.TextBox("searchTerm", null, new { id = "txtSearch" })


txtSearch已连接到我的skript SearchUser.js:

$(function () {
    $("#txtSearch").autocomplete({
        source: '@url.Action("New1", "Dialog")',
        minLength: 1
    });
});


当我使用源字符串数组时,将显示自动完成功能。

JavaScript被注册在视图顶部,而jQueryUI被注册在_Layout.cshtml中。我正在使用jquery 1.11.3和jqueryui 1.11.4。

在JsonResult的Controller New1中,您会发现:

public JsonResult Dialog(string search)
{
    List<string> users = db
                            .Users
                            .Where(p => p.FirstName.ToLower().Contains(search.ToLower()))
                            .Select(p => p.LastName)
                            .ToList();

    return Json(users, JsonRequestBehavior.AllowGet);
}


当我测试网站并查找http://localhost:51299/New1/Dialog?search=m
我得到了json文件。 json文件包含以下内容:["Mueller"]

但是,当我转到公式http://localhost:51299/New1/Create并将“ m”插入到TextBox中时,什么也没发生。

所以现在我的问题是:我该怎么做才能使其正常工作?



更新(正在运行!!!)

Aaaaah它的工作!非常感谢!他无法使用源,所以现在我将其更改为“ / New1 / Dialog”。
我知道这不是使用直接URL而不是'@ url.Action(“ Dialog”,“ New1”)'的好方法,但是我认为他在普通的'和'之间无法区别。
如果您有一个想法为什么我不能使用@ url.Action,我会对它感兴趣。

查看(Create.cshtml)

@Html.TextBox("searchTerm", null, new { id = "searchTerm" })


Skript(SearchUser.js)

$(function () {
$("#searchTerm").autocomplete({
    source: "/New1/Dialog",
    minLength: 1
});
});


控制器(New1Controller.cs)

public JsonResult Dialog(string term)
    {
        List<string> users = db
                            .Users
                            .Where(p => p.LastName.ToLower().Contains(term.ToLower()))
                            .Select(x => x.LastName)
                            .ToList();

     return Json(users, JsonRequestBehavior.AllowGet);
    }

最佳答案

jQueryUI自动完成功能使用名称term(而不是search)来制作请求。换句话说,当您输入“ m”时,它将发送以下请求:


  http://localhost:51299/New1/Dialog?term=m


您应该能够通过简单地重命名参数来解决此问题:

public JsonResult Dialog(string term)

09-18 15:43