将控制器/模型中的项目列表传递给javascript中的变量 - 自动完成

时间:2012-10-26 10:52:32

标签: c# javascript asp.net-mvc-3

我在NamesModel中有一个方法,它获取所有名称并返回一个名称列表:

public static List<NamesModel> GetAllNames()
{
    List<NamesModel> names = new List<NamesModel>();

    // 
    // code to fetch records
    //

    return names;
}

在我的控制器中:

public ActionResult Index()
{
   NamesModel model = new NamesModel();
   model.GetAllNames();

   return View(model);
}

在视图中,我有一个文本框:

@Html.TextBox("search-name")

现在在我的javascript中,我想从模型(从方法)或从控制器获取所有名称变量,例如:

<script type="text/javascript">

 $(function () {

     var names = ...........
     $(document).ready(function () {
          $('#search-name').autocomplete({
               source: names
          });
     });
 });
</script>

如果我使用硬编码然后它可以工作,但我想使用存储在数据库中的名称。有可能吗?

硬编码示例:

var names = ["abc", "xyz"];

3 个答案:

答案 0 :(得分:1)

您可以将Ajax和Json用于此

对于您的控制器:

[HttpPost]
public JsonResult GetAllNames()
{
   List<NamesModel> names = new List<NamesModel>();

   // 
   // code to fetch records
   //

   return Json(names);
}

或者进行调试,以便在浏览器中查看json:

public JsonResult GetAllNames()
{
   List<NamesModel> names = new List<NamesModel>();

   // 
   // code to fetch records
   //

   var result = Json(names);
   result .JsonRequestBehavior = JsonRequestBehavior.AllowGet;
   return result ;
}

(注意这实际上是jquery但是因为你使用了document.ready你已经包含了jquery)

你的javascript中的

调用上面的方法:

$.getJSON(@Url.Content("~/ControllerName/GetAllNames/"), function (result) {
         var ListWithNames = data;
});

答案 1 :(得分:0)

“source”选项属性可以是一个字符串,指向返回json数据的URL(http://api.jqueryui.com/autocomplete/#option-source

答案 2 :(得分:0)

我的问题的最佳解决方案是在此博客中:http://theycallmemrjames.blogspot.co.uk/2010/03/jquery-autocomplete-with-aspnet-mvc.html

感谢所有试图帮助我的人。