Отредактируйте проблему внизу !!
Я хочу, чтобы моя функция автозаполнения работала, и всегда получаю это:
Коллекция Controls не может быть изменена, потому что элемент управления содержит блоки кода (т.е. <% ...%>). Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Мой скрипт и HTML-код:
<head runat="server">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><%--<%= Page.Title %> --%>- Ticketsystem</title>
<link href="~/Content/master.css" rel="stylesheet" type="text/css" />
<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" />
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.js"></script>
<script type="text/javascript" lang="ja">
$(function ()
{
$('#tbCompany').autocomplete(
{
source: function (request, response)
{
$.ajax({
url: "Autocomlete.asmx/GetCompanyNames",
data: "{ 'searchTerm': '" + request.term + "' }",
type: "POST",
dataType: "json",
contentType: "application/json;charset=utf-8",
success: function (result) {
response(result.d);
},
error: function (result) {
alert('There is a problem processing your request');
}
});
},
minLength: 0
});
});
</script>
</asp:PlaceHolder>
</head>
<body>
<form runat="server">
<asp:TextBox ID="tbCompany" runat="server" Style="margin-top:10px" ClientIDMode="static"></asp:TextBox>
Я не знаю, если мой сценарий неверен или что-то отсутствует. Я попытался поместить его в конец моей страницы, в div или заполнитель, как предложено из других вопросов.
Редактировать: теперь я сделал почти все, что вы предложили, и теперь это выглядит выше и ошибка ниже.
Ошибка:
Uncaught TypeError: $ (...). Автозаполнение не является функцией
7 ответов
Как вы можете видеть здесь: https://support.microsoft.com/en-us/kb / 976112 встроенное выражение <%:
не существует.
Попробуйте изменить <%: ... %>
на <%= ... %>
.
Вы также загружаете jquery дважды. Ваша версия пользовательского интерфейса jquery 1.10.3
, но вы загружаете версию jquery-1.9.1.js
.
Попробуйте загрузить эти версии:
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.4.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<link rel="stylesheet" type="text/css" href="http://code.jquery.com/ui/1.11.4/themes/ui-lightness/jquery-ui.css">
Вы должны поместить свой скрипт внутри тега-заполнителя.
<asp:PlaceHolder runat="server">
<script type="text/javascript" lang="ja">
$(function() {
$("#<%=tbCompany.ClientID%>").autocomplete({
source: function(request, response) {
$.ajax({
url: "Autocomlete.asmx/GetCompanyNames",
data: "{ 'searchTerm': '" + request.term + "' }",
type: "POST",
dataType: "json",
contentType: "application/json;charset=utf-8",
success: function(result) {
response(result.d);
},
error: function(result) {
alert('There is a problem processing your request');
}
});
},
minLength: 0
});
});
</script>
</asp:PlaceHolder>
РЕДАКТИРОВАТЬ: Кажется, что последняя ошибка из-за отсутствия jQuery UI js или неправильной последовательности. Можете ли вы удалить все js-файлы, связанные с jQuery, и добавить в свой код последнюю версию jQuery после этого jQuery UI?
Как и в комментариях, вы используете .net 4.5.
.net 4 купила с ним некоторые изменения в элементах управления asp.net. Особенно один атрибут называется ClientIDMode
Это позволяет вам контролировать, как ASP.Net отображает и переименовывает идентификатор элементов управления. Теперь вы можете сказать .net, чтобы оставить их в покое ..
Вы можете изменить это:
$('#<%=tbCompany.ClientID%>').autocomplete({...
К этому:
$('#tbCompany').autocomplete({...
И к элементу с идентификатором tbCompany
добавьте атрибут ClientIDMode="static"
- это скажет .net оставить этот идентификатор в покое и использовать все, что вы установили.
Подробнее о ClientIDMode здесь
Попробуйте <%# tbCompany.ClientID %>
вместо <%=tbCompany.ClientID%>
<script type="text/javascript" lang="ja">
$(function() {
$("#<%# tbCompany.ClientID %>").autocomplete({
source: function(request, response) {
$.ajax({
url: "Autocomlete.asmx/GetCompanyNames",
data: "{ 'searchTerm': '" + request.term + "' }",
type: "POST",
dataType: "json",
contentType: "application/json;charset=utf-8",
success: function(result) {
response(result.d);
},
error: function(result) {
alert('There is a problem processing your request');
}
});
},
minLength: 0
});
});
</script>
В голове добавлено слишком много файлов jQuery, попробуйте использовать только один jquery, и это может решить эту проблему.
Вы можете просто использовать только последнюю версию уменьшенного файла.
Вы не против попробовать отделить переменную использования "# <% = tbCompany.ClientID%>"? Как: <% = String value = tbCompany.ClientID%> И: $ ("# value") .... Может, "автозаполнение" не имеет значения.
Вы загружаете Jquery-ui. {Version} .js, так как я не вижу его в вашем коде для ошибки автозаполнения.
Если вы пишете код в отдельном js-файле, то <%%> не будет работать. Вместо этого вы можете использовать ClientIDMode в качестве статического и вместо aspx синтаксиса, который вы можете использовать
$("#tbCompany")
Надеюсь, это сработает.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.