Расширение ClientID в строке события - PullRequest
0 голосов
/ 22 января 2010

У меня проблема с расширением <% = obj.ClientID%> в пользовательском элементе управления .ascx.

У меня есть файл .js, содержащий функцию javascript:

function doSomething(objectId)
{
    ...
}

У меня есть файл .ascx с некоторыми элементами html, и в одном элементе onclick = я хочу вызвать doSomething (), передавая идентификатор элемента в этот файл .ascx, где переданный идентификатор является элементом другого чем тот, на который нажали, поэтому я не могу использовать «это».

Может быть, с примером будет понятнее.

Это работает:

<script type="text/javascript">
    function redirect()
    {
        doSomething('<%= top.ClientID %>');
    }
</script>
<div id="top" runat="server">
    <img src="..." alt="..." onclick="redirect();"/>
</div>

Но это не так:

<div id="top" runat="server">
    <img src="..." alt="..." onclick="doSomething('<%= top.ClientID %>');"/>
</div>

Когда я смотрю на источник, я вижу, что подстановка <% =%> не произошла, вместо "doSomething ('ctl00_myControl_top');"; Я получаю "doSomething ('<% = top.ClientID%>');"

По какой-то причине расширение сценария происходит в первом случае, но не во втором. Обходной путь, конечно, неприемлем, потому что он сломается, если я включу несколько копий элемента управления на странице - будет доступна только функция «redirect ()» одного экземпляра.

Любые идеи о том, как сделать эту замену?

Ответы [ 2 ]

2 голосов
/ 22 января 2010

работает на моей машине?

<div id="top" runat="server">
    <a href="#" onclick="doSomething('<%= top.ClientID %>')">rarrarara</a>
</div>

Становится

<div id="ctl00_ContentPlaceHolder1_top">
    <a href="#" onclick="doSomething('ctl00_ContentPlaceHolder1_top')">rarrarara</a>
</div>
0 голосов
/ 27 февраля 2014

Рассмотрим альтернативный маршрут:

Убедитесь, что для элемента управления, на который вы ссылаетесь в JavaScript, используется встроенное выражение <%= (controlName).ClientID %>, для его спецификатора ClientIDMode установлено статическое значение, а затем просто используйте текст в поле идентификатора этого элемента управления для ссылки на него. Я использовал это в недавнем проекте, он прекрасно работает. Пожалуйста, смотрите ссылку ниже для более подробного объяснения:

Код проекта - функция идентификации клиента ASP.NET v4.0

Наряду с установкой спецификатора «ClientIDMode» на «Статический» я нашел полезную идею относительно размещения текста из файла глобальных ресурсов (в случае переключения языка) в поле стандартного элемента управления HTML, который не должен запустить на уровне сервера. Я использовал это на стандартной кнопке HTML, которая должна была вызывать функцию JavaScript, которая отображала бы / скрывала определенный div или панель ASP. Используйте функцию GlobalResource в тегах встроенного выражения следующим образом:

<input id="btnToggleFilterOptions" type="button" value="<%=GetGlobalResourceObject("SiteResource", "btnToggleFilterOption")%>" onclick="javascript:ToggleCssClass('divFilterOption','visible'); return false;" class="button submit" />

<asp:Panel ID="divFilterOption" ClientIDMode="Static" runat="server">
    <asp:TextBox ID="txtFilterOption1" runat="server" />
</asp:Panel>

Я знаю, что это старый пост, но он очень популярен при поиске в Google Asp .NET и ClientID. Я надеюсь, что это поможет кому-то еще!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...