如何将值传递给javascript数组?

时间:2010-10-06 17:48:25

标签: javascript asp.net jquery autocomplete

我正在尝试为文本框实现自动完成方法。

我想使用基于jquerys autocomplete提供的here

的示例
<head>
  <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

  <script>
  $(document).ready(function() {
    $("input#autocomplete").autocomplete({
    source: ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"]
});
  });
  </script>
</head>

第一个主要问题是我不知道将我的值传递给source:

的方式

通过说我的意思是,假设我有一个服务器端的ASP.NET函数 GetTheResults作为listof(字符串)或 GetTheResults为string()

我应该如何将这些值作为自动完成所需的源传递?

第二个问题是具体方式不使用AJAX。 这意味着我猜表单的负载我会将所有可用的值加载到源。这不是一个矫枉过正的事吗?

你有什么建议?

谢谢和问候!

2 个答案:

答案 0 :(得分:0)

您可以手动将内容从服务器写出到客户端。尝试创建一个名为:

的公共方法
public string GetJs()
{
   var data = this.GetTheResults();
   string output = "[";
   bool comma = false;

   foreach (var i in data)
   {
      if (comma)
        output += ", ";
      else
        comma = true;

       output += '" + i + "'";
   }

   return output + "]";
}

将客户端脚本更改为:

 $(document).ready(function() {
    $("input#autocomplete").autocomplete({
    source: <%= GetJs() %>
});
  });

您可能必须注入&lt;%=%&gt;作为一个字符串,而不是:

source: eval("<%= GetJs() %>")

或者你可以将整个JS从页面写到输出。

HTH。

答案 1 :(得分:0)

哦,也许我误解了 - 是GetTheResults服务器端的ASP.NET函数?你没说。这假设它是一个客户端JavaScript函数。如果它是服务器端,为什么不实现AJAX方式?


如果GetTheResults返回所有值,那么我认为你可以用内联填充它,即

$("input#autocomplete").autocomplete({
    source: GetTheResults()
    }
});

然后控件将过滤列表以供显示。或者您可以使用该页面上记录的功能源机制,例如

$("input#autocomplete").autocomplete({
    source: function(request, response) {
        var results = GetTheResultsForInput(request.term);
        response(results);
    }
});