2014-01-27 64 views
0

我有一些使用AJAX工具包的問題。GridView的templatefield文本框和AutoCompleteExtender ASP.NET

我有一個模板字段,其中有一個文本框,一個GridView。

我已經加入了這個文本框的AutoCompleteExtender。我還設置了AutoCompleteExtender的ServicePath和ServiceMethod屬性。

我不會得到任何錯誤,但是當我在文本框中鍵入文本,我不會讓任何東西回來。我將發佈下面的代碼。

因爲我是一個新手到AJAX,我不知道是否有一些其他的東西需要在我的項目中使用AJAX來進行設置。

我使用ASP.NET和VB.NET代碼隱藏。

<%@ Page Language="vb" AutoEventWireup="false" MasterPageFile="~/Plain.Master" CodeBehind="BillPatient.aspx.vb" Inherits="Test.BillPatient" %> 

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

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
<link href="Content/themes/base/minified/jquery-ui.min.css" rel="stylesheet" type="text/css" /> 
<script src="Scripts/jquery-1.9.1.min.js" type="text/javascript"></script> 
<script src="Scripts/jquery-ui-1.10.3.min.js" type="text/javascript"></script> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="Content" runat="server"> 
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
<Triggers> 
<asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" /> 
<asp:AsyncPostBackTrigger ControlID="btnCancel" EventName="Click" /> 
</Triggers> 
<ContentTemplate> 
<center> 
<br /> 
<h1> 
<asp:Label ID="lblTitle" runat="server" Text="New OP Patient Bill" /> 
</h1> 
<br /> 
<asp:Label ID="lblStatus" runat="server" ForeColor="Green" /> 
<table id="tblModify" class="table" frame="border" width="100%"> 
<tr> 
<td> 
<asp:Label ID="lblBillDetail" runat="server" Text="Bill Detail(s)" Visible="false"></asp:Label> 
<asp:GridView ID="gvBillDetail" runat="server" AllowPaging="True" AutoGenerateColumns="False" CssClass="table" Width="100%"> 
<Columns> 
<asp:BoundField DataField="Id" HeaderText="ID"> 
<HeaderStyle HorizontalAlign="Center" Width="50px" /> 
<ItemStyle HorizontalAlign="Center" /> 
</asp:BoundField> 
<asp:TemplateField HeaderText="Particulars"> 
<ItemTemplate> 
<asp:TextBox ID="txtBillableItem" runat="server" Columns="30" MaxLength="30"></asp:TextBox> 
<asp:AutoCompleteExtender ServiceMethod="GetCompletionList" MinimumPrefixLength="1" ID="txtBillableItem_AutoCompleteExtender" runat="server" DelimiterCharacters="" Enabled="True" ServicePath="~/BillDetail.asmx" TargetControlID="txtPatientName"> 
</asp:AutoCompleteExtender> 
</ItemTemplate> 
<HeaderStyle HorizontalAlign="Left" /> 
<ItemStyle HorizontalAlign="Left" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Billable Amount"> 
<ItemTemplate> 
<asp:Label ID="lblBillableAmount" runat="server"></asp:Label> 
</ItemTemplate> 
<HeaderStyle HorizontalAlign="Left" /> 
<ItemStyle HorizontalAlign="Left" /> 
</asp:TemplateField> 
<asp:ButtonField ButtonType="Button" CommandName="Modify" HeaderText="Modify" Text="Modify"> 
<ControlStyle CssClass="btn btn-info btn-xs" /> 
<HeaderStyle HorizontalAlign="Center" Width="90px" /> 
<ItemStyle HorizontalAlign="Center" /> 
</asp:ButtonField> 
</Columns> 
<PagerSettings Mode="NumericFirstLast" Position="TopAndBottom" /> 
<PagerStyle HorizontalAlign="Right" /> 
</asp:GridView> 
<asp:ValidationSummary ID="ValidationSummary2" runat="server" ForeColor="#993333" Style="text-align: center" Visible="True" ValidationGroup="AddBillDetail" /> 
<asp:Button ID="btnSave" runat="server" CssClass="btn btn-primary" Text="Save" ValidationGroup="Save" /> 
&nbsp; 
<asp:Button ID="btnCancel" runat="server" CausesValidation="False" CssClass="btn" Text="Cancel" /> 
</center> 
</ContentTemplate> 
</asp:UpdatePanel> 
</asp:Content> 

請原諒我不能正確格式化代碼:)

而且我的web服務代碼是: -

Imports System.Web.Services 
Imports System.Web.Services.Protocols 
Imports System.ComponentModel 

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
<System.Web.Script.Services.ScriptService()> _ 
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _ 
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ 
<ToolboxItem(False)> _ 
Public Class BillDetail 
Inherits System.Web.Services.WebService 
<WebMethod()> _ 
Public Function HelloWorld() As String 
Return "Hello World" 
End Function 

    <System.Web.Services.WebMethodAttribute(),System.Web.Script.Services.ScriptMethodAttribute()> 
Public Shared Function GetCompletionList(ByVal prefixText As String, ByVal count As Integer) As String() 
' Create array of movies 
Dim movies() As String = {"Star Wars", "Star Trek", "Superman", "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 

End Class 

我希望上述信息就足夠了。如果沒有,請評論我將提供更多信息。 謝謝!

回答

0

我自己得到了這個解決方案。

我剛剛停止使用WebService,並將我的ServiceMethod放在我的代碼隱藏中。

設置屬性ServicePath將自己的網頁。即如果AutoCompleteExtender是Test.aspx文件和服務方法在Test.aspx.vb,那麼性能將是: -

ServiceMethod="GetCompletionList" 

ServicePath="~/Test.aspx.vb" 

如果實際上得到執行ServiceMethod但如果下拉列表在UI中不可見,那麼在html標籤中添加follwing代碼。

<style type="text/css" > 
     .popUpDialog 
    { 
     z-index: 99 !important; 
    } 

    .autoComplete_listMain 
    { 
     z-index: 2147483647 !important; 
     background: #ffffff; 
     border: solid 2px #808080; 
     color: #000000; 
    } 
     </style> 

我不知道爲什麼我應該加這個,但它肯定對我有用! :)

如果有人知道爲什麼,請在這裏免費評論....

相關問題