2010-03-06 35 views
0

我在我的應用程序中使用了自動完成擴展器,但它不起作用。這是我的代碼:ajax(asp.net)中的Autocomplet擴展控件?

<form id="form1" runat="server"> 
<asp:scriptmanager ID="Scriptmanager1" runat="server"></asp:scriptmanager> 
    <br /> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
<div> 
    <cc1:AutoCompleteExtender TargetControlID="TextBox1" MinimumPrefixLength="1" 
    ServiceMethod="GetVideoTitles" CompletionSetCount="10" ServicePath="Myservices.asmx" ID="AutoCompleteExtender1" runat="server"> 
    </cc1:AutoCompleteExtender> 
</div> 
</form> 

這是Web服務的方法:

public string[] GetVideoTitles(string prefixText) 
{ 

    SqlConnection con = new SqlConnection(@"Data Source=SERVER5\SQLserver2005;Initial Catalog=tpvnew;User ID=xx;Password=525"); 
    con.Open(); 
    SqlCommand cmd = new SqlCommand("video_videotitles", con); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("@prefixText", SqlDbType.VarChar, 50); 
    cmd.Parameters["@prefixText"].Value = prefixText; 

    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataTable dt = new DataTable(); 
    da.Fill(dt); 
    string[] items = new string[dt.Rows.Count]; 
    int i = 0; 
    foreach (DataRow dr in dt.Rows) 
    { 
     items.SetValue(dr["videotitle"].ToString(), i); 
     i++; 
    } 
    return items; 
} 

回答

1

您是否嘗試過在你的GetVideoTitles方法設置斷點,並驗證它返回的任何項目?

+0

確定我會盡量通知您,感謝您迴應 – 2010-03-06 11:48:32

+0

斷點不點火。當我做一個web服務(Myservices.mscx)startuppage它工作正常。但是當我做startuppage作爲default.aspx它沒有顯示我的texbox的任何下拉 – 2010-03-06 11:52:47

+1

我假設servicepath是正確的,你可以直接訪問它:也許你缺乏屬性[System.Web.Script.Services.ScriptMethod ]上的方法和Web服務類上的[System.Web.Script.Services.ScriptService]? – Luhmann 2010-03-06 12:11:40

1

試試這一招

public string[] GetVideoTitles(string prefixText) { 
    try 
    { 
    ...Your code... 

      foreach (DataRow dr in dt.Rows) 
      { 
      items.SetValue(dr["videotitle"].ToString(), i); 
      Debug.Write(dr["videotitle"].ToString()); 
      i++; 
      } 
    ...Your code... 
    } 
    catch(Exception) 
    { 
     Debug.Assert(false); 
    } 
} 

這樣,如果在Web服務方法運行停止的財產以後,你先找到。 同樣使用的DebugView Sysinternals公司檢查過你Debug.write獲取數據()

Debug View

希望這2認爲幫助您找到的bug。

- 發現這個在asp.net forums-- http://forums.asp.net/t/1123944.aspx

在大多數情況下,WebService的方法並沒有得到調用becasue將WebMethod簽名不符合自動完成擴展簽名匹配。方法簽名必須是:

的String [] WSMethodName(字符串prefixText,詮釋計數)

您可以有不同的方法名稱,但參數名稱和返回類型必須是精確匹配,即使在情況。

閱讀此頁 http://www.vishwamohan.com/post/2007/05/07/AJAX-Error-Sys-is-undefined.aspx

,而這個頁面 http://blogs.imeta.co.uk/TAxworthy/archive/2009/01/15/569.aspx 發現這個問題SYS可以解決辦法....

最重要的路線是:

allowDefinition的=」 MachineToApplication「

<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" /> 

與應用程序的web.config相比,最後一部分丟失了。當這條線被修改時,javascript錯誤被修復了,並且AJAX控件再次正常工作。

+0

謝謝你先生艾裏索斯我會盡量讓你通知你 – 2010-03-12 09:07:48

+0

先生Aristos它給這樣的錯誤 'Myservices.GetVideoTitles(string)':並非所有的代碼路徑返回一個值 公共字符串[] GetVideoTitles(字符串prefixText) { 嘗試 – 2010-03-12 09:18:13

+0

雅Aristos的先生我解決售後服務的錯誤,但自動完成不工作 – 2010-03-12 09:41:30

0

嘗試查看您的web方法GetVideoTitles()是否有效。 如果有效,請檢查是否在腳本管理器中設置了.asmx Web服務路徑。

<asp:ScriptManager ID="smMain" runat="server"> 
     <Services> 
      <asp:ServiceReference Path="~/WebServices/AutoComplete.asmx"/> 
     </Services> 
</asp:ScriptManager> 
+0

亞我寫的ScriptManager – 2010-03-19 03:33:28

+0

這段代碼的 2010-03-19 03:33:46

+0

,但它不工作 – 2010-03-19 07:34:08

0

你錯過這個

enter code here da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = **prefixText + "%"**; 

,並在查詢必須使用

enter code here like @prefixText