У меня есть веб-сервис, который получает ProductName, и мне нужно, чтобы Продукты, выпадающие из AutoExtender, были ссылками на отдельную страницу каждого продукта.Сейчас URL-адрес заполняется ProductName, а не ID:
Default.aspx?id=Test%20Product
должен быть
Default.aspx?id=519
* Примечание. Этот сайт предназначен только для внутреннего использования, поэтому мыне беспокоиться о том, чтобы быть взломанным прямо сейчас.Мы хотим, чтобы сайт работал.
Мне сказали, что люди на форуме asp.net не могут сделать то, что я хочу, поэтому я пришел сюда в надежде на некоторую помощь.Я думаю, что это javascript, который получает ProductName от веб-службы, и мне нужно, чтобы получить ProductID.Я попытался переписать цикл For Each, чтобы включить ProductID вместо ProductName, но затем AutoCompleteExtender отображает только идентификаторы в результатах вместо ProductNames.
Javascript:
<script type="text/javascript">
function AutoCompleteClientMethod(source, eventArgs) {
var value = eventArgs.get_value();
window.location = ("/Product/Default.aspx?id=" + value)
}
</script>
Вот коддля моего autoCompleteExtender и веб-службы:
<asp:TextBox ID="Search" runat="server" AutoComplete="off"></asp:TextBox>
<asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="Search" ServicePath="~/ProductSearch.asmx" ServiceMethod="GetProducts" MinimumPrefixLength="1" CompletionSetCount="120" EnableCaching="true" OnClientItemSelected="AutoCompleteClientMethod">
</asp:AutoCompleteExtender>
' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class ProductSearch
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function GetProducts(ByVal prefixText As String, ByVal count As Integer) As String()
Dim ProductSql As String = "Select DISTINCT ProductID, ProductName FROM Product WHERE ProductName LIKE '%" & prefixText & "%' ORDER BY ProductName ASC"
Dim sqlConn As New SqlConnection
sqlConn.Open()
Dim myCommand As New SqlCommand(ProductSql, sqlConn)
Dim myReader As SqlDataReader = myCommand.ExecuteReader()
Dim myTable As New DataTable
myTable.TableName = "ProductSearch"
myTable.Load(myReader)
sqlConn.Close()
Dim items As String() = New String(myTable.Rows.Count - 1) {}
Dim i As Integer = 0
For Each dr As DataRow In myTable.Rows
items.SetValue(dr("ProductName").ToString(), i)
i += 1
Next
Return items
End Function
End Class
Редактировать: Добавление способа отображения результатов поиска до переключения на AutoCompleteExtender.Я пытался включить это в то, что у меня сейчас, но я не могу заставить что-то работать правильно.Обратите внимание, что это код СТАРЫЙ , который на выше - это весь код, который я использую СЕЙЧАС.
<div class="hiddenResults">
<ul id="hiddenResults" style="display:none;">
<asp:ListView ID="lvProducts" runat="server" DataSourceID="dsProducts">
<ItemTemplate>
<li><a href="/Product/Default.aspx?id=<%# eval("ProductID") %>"><span class="title"><%# eval("ProductName") %></a></span></li>
</ItemTemplate>
</asp:ListView>
</ul>
</div>
Я пытался
<ul style="list-style:none;"><li><a href='/Product/Default.aspx?id=<%# eval("ProductID") %>'>
<asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="Search" ServicePath="~/ProductSearch.asmx" ServiceMethod="GetProducts" MinimumPrefixLength="1" CompletionSetCount="120" EnableCaching="true" OnClientItemSelected="AutoCompleteClientMethod">
</asp:AutoCompleteExtender></a></li></ul>
, но наличие расширителя автозаполнения в списке не позволяет отображать результаты запроса.
Редактировать: Рабочий код:
For Each dr As DataRow In myTable.Rows
Dim id As String = dr("ProductID").ToString()
Dim name As String = dr("ProductName").ToString()
Dim item As String = AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(name, id)
items.SetValue(item, i)
i += 1
Next