脚本没有连接到JsonResult控制器

时间:2015-07-26 20:31:25

标签: c# jquery json asp.net-mvc-4 jquery-ui-autocomplete

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

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

所有文本框,DropDownLists和编辑器都连接到模型,如下所示:

<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并插入&#34; m&#34;进入TextBox没有任何反应。

所以现在我的问题是:我能做些什么让它发挥作用?

更新(它正在工作!!!)

Aaaaah工作!!!非常感谢!他无法使用源代码,所以现在我将其更改为&#34; / New1 / Dialog&#34;。 我知道使用直接网址而不是&#39; @ url.Action(&#34; Dialog&#34;,&#34; New1&#34;)&#39;这不是一个好方法,但我认为他在正常&#39; &#34; 之间无法区分。 如果你有一个想法,为什么我不能使用@ url.Action,我会对它感兴趣。

查看(Create.cshtml)

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

Skript(SearchUser.js)

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

controller(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);
    }

1 个答案:

答案 0 :(得分:1)

jQueryUI自动填充使用名称term(不是search)来制作请求。换句话说,当您键入&#34; m&#34;时,它会发送以下请求:

  

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

您应该只需重命名参数即可解决此问题:

public JsonResult Dialog(string term)