Отредактируйте проблему внизу !!

Я хочу, чтобы моя функция автозаполнения работала, и всегда получаю это:

Коллекция 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: $ (...). Автозаполнение не является функцией

0
MaxW 18 Дек 2015 в 15:50

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">
1
Lucas Souza 18 Дек 2015 в 14:01

Вы должны поместить свой скрипт внутри тега-заполнителя.

 <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?

1
AshishJindal 21 Дек 2015 в 07:27

Как и в комментариях, вы используете .net 4.5.

.net 4 купила с ним некоторые изменения в элементах управления asp.net. Особенно один атрибут называется ClientIDMode

Это позволяет вам контролировать, как ASP.Net отображает и переименовывает идентификатор элементов управления. Теперь вы можете сказать .net, чтобы оставить их в покое ..

Вы можете изменить это:

$('#<%=tbCompany.ClientID%>').autocomplete({...

К этому:

$('#tbCompany').autocomplete({...

И к элементу с идентификатором tbCompany добавьте атрибут ClientIDMode="static" - это скажет .net оставить этот идентификатор в покое и использовать все, что вы установили.

Подробнее о ClientIDMode здесь

0
Darren Wainwright 18 Дек 2015 в 14:02

Попробуйте <%# 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>
0
salc2 18 Дек 2015 в 13:30

В голове добавлено слишком много файлов jQuery, попробуйте использовать только один jquery, и это может решить эту проблему.

Вы можете просто использовать только последнюю версию уменьшенного файла.

0
Vigikaran 18 Дек 2015 в 13:00

Вы не против попробовать отделить переменную использования "# <% = tbCompany.ClientID%>"? Как: <% = String value = tbCompany.ClientID%> И: $ ("# value") .... Может, "автозаполнение" не имеет значения.

0
Lumi.seven 18 Дек 2015 в 13:53

Вы загружаете Jquery-ui. {Version} .js, так как я не вижу его в вашем коде для ошибки автозаполнения.

Если вы пишете код в отдельном js-файле, то <%%> не будет работать. Вместо этого вы можете использовать ClientIDMode в качестве статического и вместо aspx синтаксиса, который вы можете использовать

$("#tbCompany")

Надеюсь, это сработает.

0
Sundar Singh 18 Дек 2015 в 13:28