Как использовать <% = 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.