首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

不寫 Web Service 實作 TextBox AutoCompleteExtender (頁面 WebMethod)

     編輯:ASP.NET 基礎

核心概念

AjaxControlToolkit 的 `AutoCompleteExtender` 需要 Web Service,但可直接在頁面代碼後置 (`.aspx.cs`) 定義 `[WebMethod]` 靜態方法作為資料來源,省去建立 `.asmx`/`.svc` 的麻煩。

資料庫端:預存程序


CREATE PROCEDURE usp_ActiveDirectoryInfo_GetDisplayNameForService
    @PrefixText NVARCHAR(MAX), @Count INT
AS
BEGIN
    DECLARE @W NVARCHAR(MAX) = @PrefixText + '%';
    EXECUTE('SELECT TOP (' + CAST(@Count AS VARCHAR) + ') [displayName] 
             FROM [dbo].[ActiveDirectoryInfo] WHERE [displayName] LIKE ''' + @W + '''');
END

邏輯層:呼叫預存程序


public class ActiveDirectoryInfo
{
    private BusinessBase _biz = new BusinessBase();

    public DataTable GetDisplayName(string prefixText, int count)
    {
        var paras = new[] {
            new Parameter("@PrefixText", SqlDbType.NVarChar, -1, prefixText),
            new Parameter("@Count", SqlDbType.Int, 4, count)
        };
        return _biz.GetDataToDataSet("usp_ActiveDirectoryInfo_GetDisplayNameForService", paras).Tables[0];
    }
}

頁面後置:WebMethod 公開


[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static string[] GetCompletionList(string prefixText, int count, string contextKey)
{
    var adi = new ActiveDirectoryInfo();
    var dt = adi.GetDisplayName(prefixText, count);
    return dt.AsEnumerable().Select(r => r["displayName"].ToString()).ToArray();
}

前端標記


<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
<!-- 或 ToolkitScriptManager -->

<asp:TextBox ID="txtReceiver" runat="server" />
<ajaxToolkit:AutoCompleteExtender 
    ID="aceReceiver" runat="server"
    TargetControlID="txtReceiver"
    ServiceMethod="GetCompletionList"
    ServicePath="" 
    MinimumPrefixLength="2"
    CompletionInterval="100"
    CompletionSetCount="10"
    DelimiterCharacters=";,"
    ShowOnlyCurrentWordInCompletionList="true" />

關鍵點總結

項目設定
ServicePath空字串 → 當前頁面
ServiceMethod頁面靜態 WebMethod 名稱
ScriptManagerEnablePageMethods="true"
WebMethod 簽章`static string[] Method(string prefixText, int count, string contextKey)`

優缺點

  • 優點:零額外檔案、部署簡單、適合小型資料集。
  • 缺點:無法跨頁面複用、大量資料建議改用獨立 Web API / WCF 並啟用快取。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved