[英]ASP.NET AJax Toolkit AutoCompleteExtender Issue
嘗試實施 AutoCompleteExtender 並出現死胡同內部服務器錯誤 500。
頁面方法:
[System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod]
public static List<string> getcompletionlist(string prefix, int count)
{
string[] dccfields = null;
List<string> ret = new List<string>();
try
{
dccfields = DCC.get_field_names();
return OFControls.get_autocomplete_list(dccfields, prefix);
}
catch (Exception ex)
{
ret.Add("!" + ex.Message);
return ret;
}
}
aspx 頁面:
<asp:TextBox ID="TextBox12" runat="server"></asp:TextBox>
<asp:AutoCompleteExtender
ServiceMethod="getcompletionlist"
MinimumPrefixLength="1"
CompletionInterval="10"
EnableCaching="false"
CompletionSetCount="1"
TargetControlID="TextBox12"
ID="AutoCompleteExtender1"
runat="server"
FirstRowSelected="false"
UseContextKey="True">
</asp:AutoCompleteExtender>
出現錯誤:
無法加載資源:服務器響應狀態為 500(內部服務器錯誤)[http://localhost:52966/QBIntegration.aspx]
我試過添加服務路徑 - 沒有變化。 還指定了另一個方法名稱並得到 404 not found 錯誤,所以看起來代碼正在被找到只是不會運行。 我也知道它正在嘗試加載它,因為只有在文本框中鍵入代碼時才會出現 500 錯誤。
另外...我在母版頁中確實有 toolkitsriptmanager。 <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePageMethods="true"></asp:ToolkitScriptManager>
提前致謝
AjaxToolKit 的最后幾個(如果不是更多)不需要 AjaxScriptManager - 它已被棄用。 您現在要使用“標准”ScriptManager(萬歲!!!!)。
因此,一個最小的工作示例將如下所示:
標記:(這不是主/子頁面設置)。
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div>
<h3>Select A Hotel</h3>
<asp:TextBox ID="TextBox1" runat="server" Width="254px"></asp:TextBox>
<ajaxToolkit:AutoCompleteExtender ID="TextBox1_AutoCompleteExtender"
runat="server" BehaviorID="TextBox1_AutoCompleteExtender"
DelimiterCharacters="" TargetControlID="TextBox1"
CompletionInterval="100"
MinimumPrefixLength="1"
ServiceMethod="SearchCustomers" >
</ajaxToolkit:AutoCompleteExtender>
</div>
</form>
</body>
因此,請注意我們如何使用標准腳本管理器。 (無論如何,您甚至不應該在工具箱中看到舊的腳本管理器——如前所述,它已貶值(它導致了太多問題——並且在同一頁面上有兩個腳本管理器無論如何都是一個非常大的毛茸茸的 js 代碼球) .
所以,有了上面的內容,我們就需要我們的例程了。
這對我有用:
[WebMethod()]
public static List<string> SearchCustomers(string prefixText, int count)
{
List<string> customers = new List<string>();
using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
{
string strSQL = "SELECT HotelName FROM tblHotels " +
"WHERE HotelName like @SearchText + '%' ORDER BY HotelName";
using (SqlCommand cmdSQL = new SqlCommand(strSQL, conn))
{
cmdSQL.Parameters.Add("@SearchText", SqlDbType.NVarChar).Value = prefixText;
conn.Open();
SqlDataReader sReader = cmdSQL.ExecuteReader();
while (sReader.Read())
customers.Add(sReader["HotelName"].ToString());
}
}
return customers;
}
結果是這樣的——我輸入了 K,然后出現了一個 drop pop:
那么,如果您有較舊的 ajax 腳本管理器? 我會建議並嘗試更新(升級)到更新版本的 ajaxtoolkit - 因為您現在只需要一個頁面腳本管理器。
您可以為此使用 nuget。 (但是,我不記得細節,但是升級現有站點有一些問題。但是,為了使用一個通用和標准的 ScriptManager 而不是其中兩個來解決這個問題是非常值得的。
您的代碼中可能唯一的“問題”? 這會返回一個字符串列表嗎??
dccfields = DCC.get_field_names();
OFControls.get_autocomplete_list(dccfields, prefix);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.