【发布时间】:2016-09-03 02:51:52
【问题描述】:
我在使用自动完成(来自数据库)文本框时遇到了问题。它对 ASP.NET (VB) 网页中的 WebMethod 进行 ajax 调用,每当在文本框中输入字母时都会给我一个“身份验证错误”。
aspx页面代码如下:
<body>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script language="javascript" type="text/javascript">
$(function () {
$('#<%=txtCompanyName.ClientID%>').autocomplete({
source: function (request, response) {
$.ajax({
url: '<%= ResolveUrl("VendorList.aspx/GetCompanyName")%>',
data: "{ 'pre':'" + request.term + "'}",
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
response($.map(data.d, function (item) {
return { value: item }
}))
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.responseText);
}
});
}
});
});
</script>
<div class="ui-widget" style="text-align:left">
<asp:TextBox ID="txtCompanyName" runat="server" Width="350px" CssClass="textboxAuto" Font-Size="12px" />
</div>
</body>
文件代码背后的VB.NET代码如下:
Partial Class VendorList
<System.Web.Services.WebMethod()> _
<System.Web.Script.Services.ScriptMethod(ResponseFormat:=Script.Services.ResponseFormat.Json)> _
Public Shared Function GetCompanyName(ByVal pre As String) As List(Of String)
Dim allCompanyNames As New List(Of String)
Using myEntities As New VendorEntities()
allCompanyNames = (From vendor In myEntities.Vendors
Where vendor.VendorName.StartsWith(pre)
Select vendor.VendorName).ToList()
End Using
Return allCompanyNames
End Function
End Class
我还尝试在包含此页面的目录中创建一个 Web.config 文件,代码如下:
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</configuration>
我也在使用 FriendlyURLS。
关于如何解决此身份验证错误的任何想法?谢谢
更新
我现在也尝试了 AjaxControlToolkit AutoCompleteExtender,但我只返回页面的 HTML 标记列表,每个列表项一个字符。
aspx页面代码如下:
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<asp:Content ID="Content2" ContentPlaceHolderID="cpMainContent" Runat="Server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods = "true"></asp:ScriptManager>
<asp:TextBox ID="txtVendorNameSearch" runat="server"></asp:TextBox>
<cc1:AutoCompleteExtender
MinimumPrefixLength="2" ServiceMethod="SearchVendorNames"
CompletionInterval="100" EnableCaching="false" CompletionSetCount="10"
TargetControlID="txtVendorNameSearch"
ID="AutoCompleteExtender1" runat="server" FirstRowSelected = "false">
</cc1:AutoCompleteExtender>
</asp:Content>
VB.NET代码隐藏文件代码如下:
Partial Class Operations_Inventory_AutoCompleteTest
Inherits BasePage
<System.Web.Script.Services.ScriptMethod(), _
System.Web.Services.WebMethod()> _
Public Function SearchVendorNames(ByVal prefixText As String, ByVal count As Integer) As List(Of String)
Dim vendorNames As List(Of String) = New List(Of String)
Using myEntities As New VendorEntities()
Dim vendors = (From vendor In myEntities.InventoryVendors
Where vendor.VendorName.StartsWith(prefixText)
Select vendor.VendorName, vendor.ID).ToList()
For Each item In vendors
vendorNames.Add(AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(item.VendorName, item.ID.ToString))
Next
End Using
Return vendorNames
End Function
End Class
【问题讨论】:
-
这个帮助? -- How to use Basic Auth -- 或 -- Using Authentication with Ajax.Request
-
实际上,只要您尝试调用的 url 在同一个网络服务器中,您就不需要身份验证访问。
-
@WhiteHat - 我不确定这里的用户名和密码用什么。有没有办法让这个匿名?
-
@DinoMyte - URL 在同一个网络服务器上。事实上,如果我将 URL 从 VendorList.aspx 更改为只是 VendorList,我会收到“parseerror”,并且 XMLHttpRequest.responseText 返回客户端页面标记...
-
还有更多关于错误的详细信息吗?
标签: javascript jquery asp.net ajax vb.net