1

我是 MVC 的新手,并试图在文本框上自动完成以返回建议的 MemberNames。我有两个问题(问题 1 - 将用户的初始文本字符输入控制器,问题 2 - 将返回的控制器名称列表显示在文本框下方)。

看法:

@section scripts{ 
    <script type="text/javascript">
        $(document).ready(function () {
            $("#autocomplete").autocomplete({ source: '@Url.Action("MemberList", "Grievances", new { autocomplete = $("#autocomplete").val() })' });
    });     
    </script>
}
...
<input id="autocomplete">

问题 1 - 在上面的视图中,如果我没有为 @Url.Action 输入第三个参数,我的控制器会收到 null 的参数值(即使一堆网站告诉我自动完成自动绑定这个值,它没有这样做)。

如果我为第三个参数输入硬代码,如下所示:

new { autocomplete = "ead" }

然后控制器接收“ead”作为参数值。如果我在上面的代码块中输入代码,则网站会出错,并在第三个参数中抱怨“意外字符'$'”。

Question1 - 如何将自动完成文本框的值传递给控制器​​?

问题 2 - 这是我的控制器代码

public ActionResult MemberList(string autocomplete)
{
var memberNames = (from p in context.Members
                   where p.MemberName.Contains(autocomplete)
                   select p.MemberName).Distinct().Take(10);
string content = string.Join<string>("\n", memberNames);
return Content(content);
}

当我将一个值(如'ead')硬编码到上面视图中的第三个参数中时,我会在控制器中获得该值。控制器从数据库中检索适当记录的列表,然后我将其返回给视图。但是,文本框下方没有显示任何内容。我确实在视图中包含了必要的 JavaScript 和 CSS 文件;如果我对值列表进行硬编码,它们会适当地显示在文本框下。只有控制器无法从中获取结果。

Question2 - 如何让控制器返回值列表,以便自动完成文本框显示它们?

非常感谢您对这两个问题的帮助。我觉得我只是在泥泞中旋转我的轮子让自动完成工作。

4

1 回答 1

0

回答 Q1

您在以下行中将jQuery ( $("#autocomplete").val()) 和 Razor ( ) 混合在一起。@Url.Action("MemberList", ...Razor 在服务器上运行,而 jQuery 在客户端上执行,因此出现错误。

'@Url.Action("MemberList", "Grievances", new { autocomplete = $("#autocomplete").val() })'

您不需要 URL 中的第三个参数。您可能会让用户输入参数名称q或 'term' 。请参阅文档

public ActionResult MemberList(string q)
{
 ...
}

回答 Q2

您不应返回 HTML 视图以响应自动完成。您应该将值列表(数组)作为 JSON 返回。

public JsonResult MemberList(string autocomplete)
{
   var memberNames = (from p in context.Members
                   where p.MemberName.Contains(autocomplete)
                   select p.MemberName).Distinct().Take(10);
   //string content = string.Join<string>("\n", memberNames);
   return Json(memberNames.ToList(), JsonRequestBehavior.AllowGet);
}
于 2013-08-01T07:57:13.553 回答