在项目中解决一个头疼的问题 我用的是vs2005,是一个程序n多个数据库,在自动完成的时候,调用的是webservice,在webservice中session,application并不可用,没有可用的全局变量,只好想其它办法,开始想在调用的时候传一个对象过来,可是autocomplete控件并不允许你这么做,再触发发事件的时候就直接初始化webservice的构造函数,然后调用方法,用httpmoudel也不可以,经查资料得知,可以传自定义参数,能传个参数那简直是救命的稻草,于是赶快这么做,可惜本人的控件并不支持,是由于本人的ajax版本过低造成的,所以立马下载更高的ajax版本,找了半天竟然都是ajax 3.0或3.5的,本人的是1.0.10301.0,网上说1.0.2...,没找到,家里面电脑上有个1.0.11119.0,呵呵可以用,立马拿来使用,本人的ajax控件卸载掉,然后安装,最后开始调试,调试的时候也很郁闷,写好了代码怎么也不执行webservice的方法,很是郁闷,原来在调用的时候方法里面的参数不能随便写,包括大小写,郁闷呀,为什么是写死的呢,实在太烂了,费了好半天的功夫,终于好了,代码如下;
客户:</td>
<td ><asp:TextBox ID="tbkh" runat="server" Width="300px" CssClass="editcss" ></asp:TextBox>
<cc1:AutoCompleteExtender ID="ajaxtbkh" runat="server" ServiceMethod="getkhxx" ServicePath="../webservice.asmx"
MinimumPrefixLength="1" CompletionSetCount="10" TargetControlID='tbkh' EnableCaching="true" UseContextKey="true"
CompletionInterval="500">
</cc1:AutoCompleteExtender>
</td>
后台代码
ajaxtbkh.ContextKey = 传你需要的参数
webservice:
添加代码如下:
[System.Web.Script.Services.ScriptService()]
[WebMethod]
public string[] getkhxx(string prefixText, int count, string contextKey)
{
List<String> khxx = new List<string>();
SqlConnection sqlconn = null;
sqlconn = new SqlConnection(contextKey);
string sqlstring = "select top 20 khbh,isnull(khmc,'') khmc from khda where isnull(ifjy,0)=0 and ((khbh like @khbh) or (khmc like @khmc) or (zjm like @zjm)) ";
SqlCommand sqlcomm = new SqlCommand(sqlstring, sqlconn);
SqlParameter param;
param = new SqlParameter(); param.ParameterName = "@khbh"; param.Value = prefixText + "%"; sqlcomm.Parameters.Add(param);
param = new SqlParameter(); param.ParameterName = "@khmc"; param.Value = "%" + prefixText + "%"; sqlcomm.Parameters.Add(param);
param = new SqlParameter(); param.ParameterName = "@zjm"; param.Value = "%" + prefixText + "%"; sqlcomm.Parameters.Add(param);
sqlconn.Open();
SqlDataReader sqldr = sqlcomm.ExecuteReader();
while (sqldr.Read())
{
khxx.Add(sqldr.GetString(0) + " " + sqldr.GetString(1));//
}
sqldr.Close();
sqlconn.Close();
return khxx.ToArray();
}