1

我是 MVC 新手,现在有问题。请给我解决方案。

我在 MVC4 中创建简单的自动完成文本框。这是我的代码

在控制器中:

public ActionResult List(string term)
    {
        DebateEntities  _db = new DebateEntities ();
        var results = from u in _db.Users 
                      where u.username.ToLower().Contains(term.ToLower())
                      select new { u.username};

        return Json(results, JsonRequestBehavior.AllowGet);
    }    

在视图中

@model DebateApp.Models.MessageModels 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" >  
<head>  
    <title></title>  
    <link href="http://www.asp.net/ajaxLibrary/jQueryCodeSamplesMVC/Content/redmond/jquery-ui-1.8.2.custom.css" rel="stylesheet"  type="text/css" />  
</head>  
<body>  

    @using (Html.BeginForm())
    {
        <fieldset>  
        <legend>User Lookup</legend>  
            @Html.TextBox("name")
            @Html.TextBox("userID")
            <input type="submit" value="Find" />          
        </fieldset>  
    }

</body>  
    <script src="http://www.asp.net/ajaxLibrary/jQueryCodeSamplesMVC/Scripts/jQueryUI/jquery-1.4.2.min.js" type="text/javascript"></script>  
    <script src="http://www.asp.net/ajaxLibrary/jQueryCodeSamplesMVC/Scripts/jQueryUI/jquery-ui-1.8.2.custom.min.js"  type="text/javascript"></script>  
    <script type="text/javascript">
        $("#name").autocomplete({
            source: '@Url.Action("List")',
            select: function (event, ui) {
                $("#name").val(ui.item.username);
            }
        });  

</script>  
</html>      

当我在文本框中键入“d”时,会出现一个列表,但它们都是“未定义的”。当我选择“未定义”选项时,它会显示正确的用户名。

我该如何解决“未定义”列表?

谢谢

4

1 回答 1

0

是的,即使我之前也遇到过这个问题。它的主要原因可能是您的 jquery 代码无法从源引用标记中提取内容。

我建议你使用以下

<script src="code.jquery.com/jquery-1.8.3.js"; type="text/javascript"></script> 
<script src="code.jquery.com/ui/1.9.2/jquery-ui.js"; type="text/javascript">

和 jquery 类似的东西

<script type="text/javascript">
  $(function () {
      $('#name').autocomplete({
          source: '@Url.Action("List")',
          minLength: 1,
          select: function (evt, ui) {
            }
      });
  });
 </script>

您可以对控制器使用相同的代码。我发现它没有问题。很可能你不会再得到未定义的了。

于 2014-02-21T05:28:19.173 回答