MVC:无法使自动完成工作

时间:2010-11-18 14:25:07

标签: asp.net-mvc

我正在看“动作中的MVC 2”一书。关于自动完成的章节最后我将其作为参考。 在控制器中,返回的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);
    }

*已编辑* 现在已经使用“string q”修复了发送参数的问题。呃?现在是将JSON返回到自动完成列表的情况。

2 个答案:

答案 0 :(得分:4)

如果您使用的是jquery UI autocomplete,则默认情况下会将查询字符串参数调用为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);
            }
        });
    }
});

问题在于它是否值得。

答案 1 :(得分:1)

我为此做了一个帮助,你可以使用它而无需了解jQuery

了解它的工作原理: http://demo.aspnetawesome.com/AutocompleteDemo

您可以从此处下载图书馆:http://awesome.codeplex.com/