Как использовать <% = control.ClientID%> в управлении сервером со встроенным файлом JS

Я создаю серверный элемент управления в проекте библиотеки, который имеет код JavaScript, код JavaScript должен получить идентификатор кнопки, поэтому я использовал <% = button.ClientID%>. Затем я встраиваю код JavaScript в виде файла в проект библиотеки и использую ScriptManager для добавления сценария в CreateChildControls().

Dim sm = ScriptManager.GetCurrent(Me.Page) 
sm.Scripts.Add(New ScriptReference("xxx.js", "LibraryProjectName"))   

Но когда я запускаю страницу, возникает ошибка синтаксического анализа jquery: недопустимое выражение ">". Поэтому я предполагаю, что код был сгенерирован, но сервер не конвертирует <% = button.ClientID%> в сгенерированный формат идентификатора. Так что мне делать в этом случае?

3 ответа

Вместо имени кнопки установите очень конкретное имя класса CSS:

<asp:Button ID="btnMyGroovy" runat="server" CssClass="VerySpecific" Text="Action" />

Тогда используйте свой jQuery Селектор, чтобы получить $('.VerySpecific') а не контрольное имя. Помните, что предметы могут иметь более одной ассоциации классов.:)

Вы можете сделать выбор более точным, выбрав CSS-класс своего серверного элемента управления, например..VerySpecificContainer затем выберите экземпляр .VerySpecific содержится в контроле.

В файле aspx:

var serverPrefix ='<%= ClientID %>';

в файле js:

function getServerId(id){
  if (typeof(serverPrefix ) != 'undefined')
  {
   return document.getElementById(prefix + '_' + id);
  }
  else
  {
   id;
  }
}

Когда вы хотите вызвать какой-то элемент, используйте вот так:

$(getServerId('myTitleTxt')).text('hello!');

надеюсь, это поможет!

Обычно это хороший подход для параметризации ваших внешних файловых функций javascript таким образом, что они не должны быть на странице при использовании asp.net.

Итак, вы должны иметь:

function foo (sender)
{
   return $(sender).val();
}

вместо

function foo ()
{
   return $("<%= sender.ClientID %>").val();
}

На примечании стороны:

Знаете ли вы, что вы можете установить статический идентификатор, если вы используете Asp.Net 4 или выше, это означает, что идентификатор будет совпадать с именем на стороне сервера и на стороне клиента, тогда вам не нужны теги <%%> определить идентификатор. Это может быть установлено в вашем web.config или в директиве страницы в верхней части вашего apge.

Другие вопросы по тегам