私は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();
}
}
}
}
任意のヘルプをいただければ幸いです。