Ajax自动完成不会拉取数据

时间:2016-05-23 12:52:54

标签: c# ajax autocomplete asp-classic

好的,我已经搜索过,并且对其他人有效的方法似乎对我没用。我试图让AJAX的自动完成工作,但我没有运气。最后,我想要一个带有自动完成功能的文本框,从sqldatasource中提取数据,但首先,我只想让它工作。所以,我尝试了一个我在本网站上找到的简单实现。使用此代码的个人使用此代码使其工作,但我的文本框功能就像普通文本框(没有自动完成功能)。我是网络开发人员的新手,非常感谢任何帮助。感谢。

更新: 好的...我尝试制作一个新的,简单的网页,并尝试再次执行自动完成功能。我得到了这个奇怪的结果(单个字符毫无意义): Incorrect Autocomplete Image

aspx代码

 [System.Web.Services.WebMethod]
        [System.Web.Script.Services.ScriptMethod]
        public static string[] GetCompletionList(string prefixText, int count)
        {
            string[] results = { "test", "test", "test" };
            return results;
        }

CS。代码

<asp:Label ID="FieldLabel" Text="Label:" runat="server"></asp:Label>
<asp:TextBox ID="InputField" runat="server"></asp:TextBox>
<ajaxToolkit:AutoCompleteExtender 
    ID="Autocompleter" 
    TargetControlID="InputField" 
    ServiceMethod="GetCompletionList" 
    ServicePath="~/BatchReleaseStatus.aspx" 
    MinimumPrefixLength="1" 
    CompletionInterval="1000" 
    runat="server">
</ajaxToolkit:AutoCompleteExtender>

的Site.Master

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="CrownLabsDbFrontEnd.SiteMaster" %>

<!DOCTYPE html>

<html lang="en">
<head runat="server">
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%: Page.Title %> - Crown Labs Quality Database</title>

    <asp:PlaceHolder runat="server">
        <%: Scripts.Render("~/bundles/modernizr") %>
    </asp:PlaceHolder>
    <webopt:bundlereference runat="server" path="~/Content/css" />
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />

    <style type="text/css">
        .auto-style1 {
            width: 131px;
            height: 91px;
        }
    </style>

</head>
<body>
    <form runat="server">
        <asp:ScriptManager runat="server" EnablePageMethods="true" EnableScriptGlobalization="true">
            <Scripts>
                <%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=301884 --%>
                <%--Framework Scripts--%>
                <asp:ScriptReference Name="MsAjaxBundle" />
                <asp:ScriptReference Name="jquery" />
                <asp:ScriptReference Name="bootstrap" />
                <asp:ScriptReference Name="respond" />
                <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
                <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
                <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
                <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
                <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
                <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
                <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
                <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
                <asp:ScriptReference Name="WebFormsBundle" />
                <%--Site Scripts--%>
            </Scripts>
        </asp:ScriptManager>

        <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    &nbsp;<a class="navbar-brand" runat="server" href="~/"><img alt="Crown Labs Logo" class="auto-style1" src="file:///C:/Users/bcampbell/Pictures/logo_crown.gif" /></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
                <div class="navbar-collapse collapse" style="padding-top:50px">
                    <ul class="nav navbar-nav">
                        <li><a runat="server" href="~/">Home</a></li>
                        <li><a runat="server" href="~/BatchReleaseStatus">Batch Release Status</a></li>
                        <li><a runat="server" href="~/CAPA">CAPA</a></li>
                        <li><a runat="server" href="~/Investigations">Investigations</a></li>
                        <li><a runat="server" href="~/Validations">Validations</a></li>
                        <li><a runat="server" href="~/Administration">Administration</a></li>

                    </ul>
                    <asp:LoginView runat="server" ViewStateMode="Disabled">
                        <AnonymousTemplate>
                            <ul class="nav navbar-nav navbar-right">
                                <li><a runat="server" href="~/Account/Register">Register</a></li>
                                <li><a runat="server" href="~/Account/Login">Log in</a></li>
                            </ul>
                        </AnonymousTemplate>
                        <LoggedInTemplate>
                            <ul class="nav navbar-nav navbar-right">
                                <li><a runat="server" href="~/Account/Manage" title="Manage your account">Hello, <%: Context.User.Identity.GetUserName()  %> !</a></li>
                                <li>
                                    <asp:LoginStatus runat="server" LogoutAction="Redirect" LogoutText="Log off" LogoutPageUrl="~/" OnLoggingOut="Unnamed_LoggingOut" />
                                </li>
                            </ul>
                        </LoggedInTemplate>
                    </asp:LoginView>
                </div>
            </div>
        </div>
        <div class="container body-content">
            <hr />
            <footer>
                <p>&copy; <%: DateTime.Now.Year %> - My ASP.NET Application<asp:ContentPlaceHolder ID="MainContent" runat="server">
            </asp:ContentPlaceHolder>
            </footer>
        </div>
    </form>
    <script src="Scripts/currentClass.js"></script>
</body>
</html>

BatchReleaseStatus.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="BatchReleaseStatus.aspx.cs" Inherits="CrownLabsDbFrontEnd.BatchReleaseStatus" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">





    <p><%--The following &nbsp;<p>'s keep the content from going under the Master Header --%>

    <p>&nbsp;<p>

<asp:Button ID="btnShow_ClientSide" runat="server"
    Text="show client side" OnClientClick="return false" />
<asp:Button ID="btnShow_ServerSide" runat="server"
    Text="show server side" OnClick="btnShow_ServerSide_Click" />
<ajaxToolKit:ModalPopupExtender ID="mdlPopup" runat="server"
    TargetControlID="btnShow_ClientSide"
    PopupControlID="pnlPopup" CancelControlID="btnHide_ClientSide"
    BackgroundCssClass="modalBackground" />
    <asp:Panel ID="pnlPopup" runat="server"
        BackColor="#CCFFFF" BorderColor="#FF6699" style="text-align: left">
        Batch Number:
        <asp:TextBox ID="BatchNumTextBox" runat="server"></asp:TextBox>
        &nbsp;&nbsp;&nbsp; Part:
        <br />
        <asp:Button ID="btnHide_ClientSide" runat="server"
            Text="hide client side" OnClientClick="return false" OnClick="btnHide_ClientSide_Click" />
        <asp:Button ID="btnHide_ServerSide" runat="server"
            Text="hide server side" OnClick="btnHide_ServerSide_Click" />
    </asp:Panel>
        <asp:Label ID="FieldLabel" Text="Label:" runat="server"></asp:Label>
<asp:TextBox ID="InputField" runat="server"></asp:TextBox>
<ajaxToolkit:AutoCompleteExtender 
    ID="Autocompleter" 
    TargetControlID="InputField" 
    ServiceMethod="GetCompletionList" 
    ServicePath="~/BatchReleaseStatus.aspx" 
    MinimumPrefixLength="1" 
    CompletionInterval="1000" 
    runat="server">
</ajaxToolkit:AutoCompleteExtender>

    <p>
          <asp:SqlDataSource ID="BatchReleaseData" runat="server" ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" SelectCommand=<%# ViewState["stringInViewState"] %>></asp:SqlDataSource>


    <%--Set up the stationary header for the primary GridView --%>
     <div style =" background-color:navy;  
        height:30px;width:450px; margin-left:auto; margin-right:auto">
        <table cellspacing="0" cellpadding = "0"  border="0" id="tblHeader" 
         style="font-family:Arial;font-size:10pt;width:438px;color:white;
         border-collapse:collapse;height:100%;">
            <tr>
                <%--Sets up the link buttons that will populate the header and allow sorting --%>

               <td style ="width:165px;text-align:center">
                   <asp:LinkButton ID="MfgDatLnkBtn" runat="server" OnClick="MfgDatLnkBtn_Click" ForeColor="White">Manufacture Date</asp:LinkButton>
                </td>
               <td style ="width:140px;text-align:center">
        <asp:LinkButton ID="BatchLnkBtn" runat="server" OnPreRender="LinkButtons_PreRender" OnClick="BatchLnkBtnClck">Batch ID</asp:LinkButton>
        </td>
               <td style ="width:135px;text-align:center">      
               <asp:LinkButton ID="DescriptionLnkBtn" runat="server" OnPreRender="LinkButtons_PreRender" OnClick="DescriptionLnkBtn_Click">Description</asp:LinkButton>
        </td>
               <td style ="width:140px;text-align:center">
                           <asp:LinkButton ID="BaseLnkBtn" runat="server" OnPreRender="LinkButtons_PreRender" OnClick="BaseLnkBtn_Click">Base</asp:LinkButton>
               </td>


            </tr>
        </table>
         </div>
    <div style="margin-left:auto; margin-right:auto; width:450px; overflow:auto; height:450px; border:solid">
    <table class="nav-justified">
        <tr>
            <td style="text-align: center">
       <div style="margin-left:auto; margin-right:auto">


        <asp:GridView ID="BatchReleaseGV"  DataSourceId="BatchReleaseData" DataKeyNames="Mfg_Date" AutoGenerateColumns="false" ShowHeader="false"
runat="server" OnSelectedIndexChanged="BatchReleaseGV_SelectedIndexChanged" OnRowDataBound="BatchReleaseGV_RowDataBound">

<Columns>

    <asp:BoundField  ItemStyle-Width = "150px" DataField="Mfg_Date" HeaderText="Manufacture Date"  DataFormatString="{0:MM/dd/yyyy }" HtmlEncode=false >
        <ItemStyle Font-Size="Large" />
    </asp:BoundField>
    <asp:BoundField  ItemStyle-Width = "150px" DataField="Batch" HeaderText="Batch ID"      
            FooterText="">
        <FooterStyle CssClass="FooterStyle" />
    </asp:BoundField >
    <asp:BoundField  ItemStyle-Width = "150px" DataField="Product" HeaderText="Description" />
    <asp:BoundField  ItemStyle-Width = "150px" DataField="Base" HeaderText="Base (if applicable)" />

</Columns>

</asp:GridView>
           </div>

            </td>
        </tr>
    </table>
        </div>
    <p>


    <asp:SqlDataSource ID="BatchReleaseDataMfgDateOnly" runat="server" ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" SelectCommand="SELECT DISTINCT CONVERT(date,[Mfg Date]) AS Mfg_Date FROM [Batch Info] ORDER BY [Mfg_Date] DESC"></asp:SqlDataSource>
    <asp:SqlDataSource ID="BatchReleaseDataBatchOnly" runat="server" ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" SelectCommand="SELECT DISTINCT [Batch] FROM [Batch Info] ORDER BY [Batch]"></asp:SqlDataSource>
    <asp:SqlDataSource ID="BatchReleaseDataProductOnly" runat="server" ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" SelectCommand="SELECT DISTINCT [Product] FROM [Batch Info] ORDER BY [Product]"></asp:SqlDataSource>
    <asp:SqlDataSource ID="BatchReleaseDataBaseOnly" runat="server" ConnectionString="<%$ ConnectionStrings:TestDBConnectionString %>" SelectCommand="SELECT DISTINCT [Base] FROM [Batch Info] ORDER BY [Base]"></asp:SqlDataSource>


    </p>
    <table class="nav-justified">
        <tr>
            <td class="text-right">Manufacturing Date:
        </td>
            <td class="text-left">
                <asp:TextBox ID="MfgDateTxtBx" runat="server"></asp:TextBox>
                <ajaxToolkit:CalendarExtender ID="MfgDateTxtBx_CalendarExtender" runat="server" TargetControlID="MfgDateTxtBx" />
                <asp:RegularExpressionValidator ID="MfgDateValidator" runat="server" ControlToValidate="MfgDateTxtBx" ErrorMessage="Invalid Date Entered" ValidationExpression="^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1}))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1})))$" Font-Bold="True" ForeColor="Red"></asp:RegularExpressionValidator>
            </td>
            <td>&nbsp;Batch ID:
       <asp:DropDownList ID="BatchDropDown" runat="server" DataSourceID="BatchReleaseDataBatchOnly" DataValueField="Batch">

        </asp:DropDownList>
                &nbsp;&nbsp;</td>
            <td>&nbsp;Description:
        <asp:DropDownList ID="ProductDropDown" runat="server" DataSourceID="BatchReleaseDataProductOnly" DataValueField="Product">

        </asp:DropDownList>
                &nbsp;&nbsp;&nbsp;</td>
            <td>Base: <asp:DropDownList ID="BaseDropDown" runat="server" DataSourceID="BatchReleaseDataBaseOnly" DataValueField="Base">
        </asp:DropDownList>
            </td>
        </tr>
        <tr>
            <td class="text-right">To (Optional): </td>
            <td style="text-align: left">
                <asp:TextBox ID="DateRangeTxtBx" runat="server"></asp:TextBox>
                <ajaxToolkit:CalendarExtender ID="DateRangeTxtBx_CalendarExtender" runat="server" TargetControlID="DateRangeTxtBx" />
                <asp:RegularExpressionValidator ID="MfgDateRangeValidator" runat="server" ControlToValidate="DateRangeTxtBx" ErrorMessage="Invalid Date Entered" ValidationExpression="^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1}))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1})))$" Font-Bold="True" ForeColor="Red" Display="Dynamic"></asp:RegularExpressionValidator>
                  <asp:CompareValidator id="MfgDateRangeComparator" runat="server" 
             ControlToCompare="MfgDateTxtBx" cultureinvariantvalues="true" 
             display="Dynamic" enableclientscript="true"  
             ControlToValidate="DateRangeTxtBx" 
             ErrorMessage="Start date must be earlier than finish date"
             type="Date" setfocusonerror="true" Operator="GreaterThanEqual" 
             text="Start date must be earlier than finish date" Font-Bold="True" ForeColor="Red"></asp:CompareValidator>

                  </td>
            <td>
                <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
                <ajaxToolkit:AutoCompleteExtender ID="TextBox3_AutoCompleteExtender" runat="server" TargetControlID="TextBox3" MinimumPrefixLength="1" ServiceMethod="GetCompletionList" ServicePath="BatchReleaseStatus.aspx">
                </ajaxToolkit:AutoCompleteExtender>
            </td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </table>
    <p>


        &nbsp;&nbsp;&nbsp;&nbsp;
        <asp:Button ID="submitBtn" runat="server" OnClick="submitBtn_Click" Text="Submit" />
    </p>
    <p>


        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
</asp:Content>

1 个答案:

答案 0 :(得分:0)

为了在aspx站点的代码隐藏文件中使用 System.Web.Services.WebMethod ,此方法必须静态。您的scriptmanager也需要设置“EnablePageMethods = true”。

=&GT;这种方法称为PageMethods。

我认为最好使用WebApi而不是PageMethods,您可以轻松地将其整合到您的asp.net项目中。在这里你会找到一个起点。 Getting started with Web-API

<强> PageMethod的试验:

<script type="text/javascript">
function Test() {
    PageMethods.Test(function(result){alert(result);});
}

[System.Web.Services.WebMethod]
public static string Test()
{
  return "Hello StackOverflow";
}