Asp.net mvc MVC:无法使自动完成工作

Asp.net mvc MVC:无法使自动完成工作,asp.net-mvc,Asp.net Mvc,我正在看《MVC2在行动》一书。关于自动完成的章节在最后,我用它作为参考。 在控制器中,返回的Json结果不会转换为自动完成的列表。这本书没有使用Json,但我无法将它们与通用列表一起使用 所以我的观点是, <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SHP.WebUI.Models.HolidayRequestViewModel>" %> <script type="text

我正在看《MVC2在行动》一书。关于自动完成的章节在最后,我用它作为参考。 在控制器中,返回的Json结果不会转换为自动完成的列表。这本书没有使用Json,但我无法将它们与通用列表一起使用

所以我的观点是,

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SHP.WebUI.Models.HolidayRequestViewModel>" %>
<script type="text/javascript" language="javascript">
    $(document).ready(function () {
        $("input#SearchText").autocomplete('<%: Url.Action("FindNames", "Employee") %>');
    });

</script>
<p>You must make sure that the correct person to approve your Annual Leave is currently selected</p>
<p>Your current approver is <%: Html.DisplayFor(model => model.ApproverName) %></p>
<p>If you want to change your approver, enter his/her name here and make your selection.</p>
<p><%: Html.TextBoxFor(model => model.SearchText) %></p>
<div id="test-panel" class="ui-state-default"> This panel will disappear on command.</div>
我的控制器是

    public JsonResult FindNames(string q)
    {
        List<EmployeeName> filteredEmployees =
            Employee.GetAllCurrentEmployeesNames().Where(x => x.Fullname.ToLower().Contains(q.ToLower())).ToList();
        return Json(filteredEmployees, JsonRequestBehavior.AllowGet);
    }
*编辑* 发送参数的问题现在已通过使用字符串q解决。很明显,嗯?现在是将JSON返回到自动完成列表的情况。

如果您使用的是查询字符串参数,则默认情况下称为term。因此:

public ActionResult FindNames(string term)
当然,这可以个性化:

$('input#SearchText').autocomplete({
    source: function(request, response) {
        $.ajax({
            url: '<%: Url.Action("FindNames", "Employee") %>',
            dataType: 'json',
            data: { searchText: request.term },
            success: function(data) {
                response(data);
            }
        });
    }
});
问题是它是否值得。

如果您使用的是查询字符串参数,则默认情况下称为term。因此:

public ActionResult FindNames(string term)
当然,这可以个性化:

$('input#SearchText').autocomplete({
    source: function(request, response) {
        $.ajax({
            url: '<%: Url.Action("FindNames", "Employee") %>',
            dataType: 'json',
            data: { searchText: request.term },
            success: function(data) {
                response(data);
            }
        });
    }
});

问题是它是否值得。

我为此做了一个助手,您可以使用它而不必了解jQuery

看看它是如何工作的:


您可以从这里下载该库:

我为此提供了一个帮助程序,您可以使用它,而无需了解jQuery

看看它是如何工作的:


您可以从这里下载库:

我不知道ASP.NET自动完成机制,但我想问题是URL上的参数名称。自动完成生成的确切URL是什么?参数的命名是什么?您是否为此操作设置了任何特定的路由?我不知道ASP.NET自动完成机制,但我想问题是URL上的参数名称。自动完成生成的确切URL是什么?参数的命名是什么?您是否为此操作设置了任何特定路线?您的路线是正确的。实际上,我应该复制我的书,它指定FindNamesstring q,所以是q而不是term。到底为什么会这样,我不知道。@arame333,如果我没记错的话,q是由老的jquery自动完成插件使用的,它现在被弃用,取而代之的是jquery UI,这是我建议你使用的插件;现在已经一年多了。@arame3333,这是旧的自动完成。这是我在回答中链接的一个,它被弃用了。我是带着你的解决方案到达那里的。我的问题是将控制器方法中的数据转换为将显示在表单上的格式。一旦我做对了,你的解决方案就会奏效,但我认为你应该看看另一个答案中的助手。你的思路是对的。实际上,我应该复制我的书,它指定FindNamesstring q,所以是q而不是term。到底为什么会这样,我不知道。@arame333,如果我没记错的话,q是由老的jquery自动完成插件使用的,它现在被弃用,取而代之的是jquery UI,这是我建议你使用的插件;现在已经一年多了。@arame3333,这是旧的自动完成。这是我在回答中链接的一个,它被弃用了。我是带着你的解决方案到达那里的。我的问题是将控制器方法中的数据转换为将显示在表单上的格式。一旦我做对了,你的解决方案就会奏效,但我认为你应该看看另一个答案中的帮助者。这看起来太棒了。很值得一提的是,这看起来棒极了。很值得知道