2

このガイド (http://www.asp.net/ajaxlibrary/act_AutoComplete_simple.ashx) に従ってオートコンプリート エクステンダーを使用しましたが、これは機能しますが、より大きなプロジェクトに実装するときは、一生違いがわかりません。 . エクステンダーをテーブル要素と入れ子にするのは問題ですか?

とにかく、チュートリアルからダンビーメソッドを呼び出すオートコンプリートエクステンダーを持っています。Webサービスを使用するのではなく、メソッドのみを使用します(ガイドのように)。このページはマスター ページを使用していますが、それによって問題が発生することがわかっていますか? ヘッダーはこちら

<%@ Page Title="Report" Language="C#" MasterPageFile="~/Doctors/MasterPage.master" AutoEventWireup="true" CodeFile="generateReport.aspx.cs" Inherits="Doctors_generateReport"
maintainScrollPositionOnPostBack="true" %>
<style>...</style>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
<asp:toolkitscriptmanager ID="ToolkitScriptManager1" runat="server" >
</asp:toolkitscriptmanager>
    <p class="headingStyle"><strong><em>Clinical Report</em></strong></p>
<table>

そしてテキストボックス:

<td class=logicalDivide>Current Medication:</td>
<td class=logicalDivide>
    <asp:TextBox ID="tbCMed" runat="server" CssClass="textbox" Width="178px" MaxLength="30" Font-Names="Calibri" onfocus="{ this.value = ''; }"></asp:TextBox>
    <asp:autocompleteextender
        ID="AutoCompleteExtender1" 
        runat="server"
        TargetControlID="tbCMed"
        ServiceMethod="GetCompletionList4" UseContextKey="True">
    </asp:autocompleteextender>
</td>

および背後にあるコード:

[WebMethod]
[ScriptMethod]
public static string[] GetCompletionList4(string prefixText, int count, string contextKey)
{
   // Create array of movies  
   string[] movies = { "Star Wars", "Star Trek", "Superman", "Memento", "Shrek", "Shrek II" };

   // Return matching movies  
   return movies.Where(m => m.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase)
                .Take(count)
                .ToArray();
}

編集 1: この質問は似ています (http://stackoverflow.com/questions/791361/trying-to-get-a-simple-example-of-asp-net-ajax-dropdownlist-autocomplete-extende?rq=1)しかし、デモのように、それ自体は機能しますが、私のアプリケーションでは機能しません。

したがって、ツールキットの動作を変更する Masterpage または web.config の設定である必要があります。何か案は ?

編集 2: ToolScriptManager をマスター ページに配置しようとしました - ダイスはありません。そして...追加

EnabledPageMethods="true"

ToolScriptManager に - まだサイコロはありません。

web.config からの最後の関連スニペット:

<pages>
  <controls>
    <add tagPrefix="asp" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit"/>
  </controls>
</pages>
<identity impersonate="true"/>
4

2 に答える 2

1

私はAjaxControlToolkitをあきらめました。jQueryソリューションは次のとおりです(Control Toolkitよりも高速です...動作が停止する前に!!):

<div class="ui-widget">

    <asp:TextBox ID="tbScripts" ClientIDMode="static" runat="server" CssClass="textbox" 
            Width="340px" MaxLength="20" Font-Names="Calibri"  onfocus="{ this.value = ''; }"
                ToolTip="add a medication/script to the managment plan"></asp:TextBox>

        <script type="text/javascript" >
        PageMethods.GetMeds(function (results) {
            $('#tbScripts').autocomplete({
                source: results,
                minLength: 3
            });
        });

...そして背後にあるコード:

    [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
   public static string[] GetMeds()//prefixText)//string prefixText, int count, string contextKey)
   {
      /* ------ database query goes here ----------- */
      return results[];
   }

これらをscriptManager内に配置します。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.9.0/jquery-ui.js"></script>
<link rel="Stylesheet" href="http://code.jquery.com/ui/1.9.0/themes/base/jquery-ui.css" />
于 2012-10-25T12:03:41.220 に答える
0

ここで私の解決策として、Web サービスを使用してオートコンプリートの関数を呼び出しています。

AjaxControlToolKit が正しくインストールされていると仮定して、次の手順に従います。

マスターページ内

1. .aspx ページの先頭に次の行を追加します。

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

2. form id="form1" runat="server" の後に次の行を追加します。

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
   <Services>
      <asp:ServiceReference Path="~/AutoComplete.asmx" />
   </Services>
</asp:ToolkitScriptManager>

3. テキストボックスと AutoCompleteExtender を追加します

<asp:TextBox ID="tbSearch" runat="server"></asp:TextBox>

<asp:AutoCompleteExtender 
                    TargetControlID="tbSearch"
                    ServicePath="AutoComplete.asmx"
                    ServiceMethod="GetCompletionList"
                    MinimumPrefixLength="3"
                    CompletionInterval="100"
                    CompletionSetCount="5"
                    EnableCaching="false"
                    CompletionListCssClass="CompletionList"
                    CompletionListItemCssClass="CompletionListItem"
                    CompletionListHighlightedItemCssClass="CompletionListHighlightedItem"
                    UseContextKey="True"
                    ID="AutoCompleteExtender1" 
                    runat="server"></asp:AutoCompleteExtender>

4. Web サービスを作成する

ソリューション エクスプローラー -> 右クリック -> 新しい項目の追加... -> Web サービス (AutoComplete.asmx に変更) を押して、[追加] ボタンを押します。

Web サービス AutoComplete.asmx 内

5. AutoComplete.vb ファイルを開き、次の行のコメントを外します。

'<System.Web.Script.Services.ScriptService()> _

VB では、この行はデフォルトでコメントであり、ASP.NET AJAX を使用して Web サービスをスクリプトから呼び出すことができるようにするために必要です。

6. public Function GetCompletionList という asp:AutoCompleteExtender ServiceMethod を追加します。

<System.Web.Services.WebMethod()>
    <System.Web.Script.Services.ScriptMethodAttribute()>
    Public Function GetCompletionList(ByVal prefixText As String, ByVal count As Integer, ByVal contextKey As String) As String()
        ' Create array of movies
        Dim movies() As String = {"Star Wars", "Star Wars 1", "Star Wars 2", "Star Trek 3", "Star Wars", "Star Wars", "Superman", "Super woman", "Memento", "Shrek", "Shrek II"}

        ' Return matching movies
        Return (
            From m In movies
            Where m.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase)
            Select m).Take(count).ToArray()

    End Function

注:気をつけて

<System.Web.Services.WebMethod()>

<System.Web.Script.Services.ScriptMethodAttribute()>

Web ページを更新してテストする

私はあなたと将来の人々を助けることを願っています.

于 2014-08-12T21:33:37.623 に答える