0

私はasp.net 4.0(vs2010)で作業しています。AutoCompleteExtender ajax コントロールを実装しようとしています。最初はページメソッドを使用しようとしましたが、ユーザーコントロールにエクステンダーがあるため、このメソッドを使用できません。調査に数日を費やした結果、Ajax 対応の WCF サービスを使用する必要があると判断しました。だから私はこれをしました。私は自分のアプリケーションから離れて、私がやろうとしていることを模倣したテスト アプリケーションを作成しました。コントロールをページに配置し、それをサービスにポイントすると、イベントが発生し、うまく機能します。そこで、必要な変更を加えてコードをメイン アプリケーションに移植しましたが、動作しません。機能しないということは、サービスでイベントが発生しないことを意味します。問題は ServicePath にあると思われますが、非常に多くの異なるパスを試しましたが、何も機能していないようです。

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
    <div style="float: left">
        <asp:Label runat="server">Site Id:</asp:Label><br />
        <asp:TextBox ID="txtSiteId" runat="server" AutoPostBack="True"     OnTextChanged="TextChangedEvent"></asp:TextBox>
    </div>
    <div style="float: left; width: 200px; padding-left: 20px; margin-right: 5px">
        <asp:Label runat="server">Entered Site Id's:</asp:Label><br />
        <asp:Repeater ID="rptSiteIds" runat="server" OnItemCommand="rptSiteIds_ItemCommand">
            <ItemTemplate>
                <asp:LinkButton id="lnkRemove" Width="50" runat="server" Text="remove" CommandName="remove"></asp:LinkButton>
                <asp:Label ID="lblItem" runat="server" Text='<%# Eval("Item") %>'></asp:Label>
            </ItemTemplate>
            <SeparatorTemplate>
                <br>
            </SeparatorTemplate>
        </asp:Repeater>
    </div>

    <Controls:ConfirmationModal runat="server" ID="MaxSiteIdConfirmation" ModalType="Alert" OnOkClicked="ConfirmationOk_Clicked"
        Title="Site Id Validation" Message="Too many site id's"
        Width="300" />

    <ajaxToolkit:AutoCompleteExtender
        runat="server"
        ID="AutoCompleteExtender"
        TargetControlID="txtSiteId" 
        CompletionSetCount="10"
        UseContextKey="True"
        ServicePath="~\DataServices\WebDataServices.svc"
        ServiceMethod="GetCompletionList" />


</ContentTemplate>

サービスのコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;


namespace Web.Internal.DataServices
{
    [ServiceContract(Namespace = "WebDataServices")]
    [AspNetCompatibilityRequirements(RequirementsMode =                     AspNetCompatibilityRequirementsMode.Allowed)]
public class WebDataServices
{
    // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is     WebMessageFormat.Json)
    // To create an operation that returns XML,
    //     add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
    //     and include the following line in the operation body:
    //         WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    [OperationContract]
    public void DoWork()
    {
        // Add your operation implementation here
        return;
    }

    // Add more operations here and mark them with [OperationContract]
    [OperationContract]
    public string[] GetCompletionList(string prefixText, int count)
    {
        //return names;
        String[] autoCompleteWordList = (from s in CreateList()
                                         where s.Contains(prefixText)
                                         select s).Take(count).ToArray();

        return autoCompleteWordList;
    }

    private string[] CreateList()
    {
        using (UnitOfWork uow = new UnitOfWork("DataService"))
        {
            return new ServiceDetailsBusiness(uow).GetDistinctIds().ToArray();
        }

    } 
}

}

任意のヘルプをいただければ幸いです。

4

1 に答える 1

0

いくつかのことを行う必要があります。

サービス メソッドは、次の属性で装飾する必要があります。

[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]

OperationContract 属性を次のように更新します。

[OperationContract WebInvoke(Method="POST", ResponseFormat = WebMessageFormat.Json)]

return autoCompleteWordListメソッドのステートメントの直前に、次のコード スニペットを追加します。

    if (WebOperationContext.Current != null)
        WebOperationContext.Current.OutgoingResponse.ContentType = "application/json";

また、Web ブラウザーから Web サービス呼び出しを正しく実行できること、およびすべてのメタデータ情報が正しく表示されることを確認してください。Web.config ファイルに EndPoint 情報を追加しましたか?

それがうまくいくかどうか教えてください。

于 2013-03-13T21:15:15.063 に答える