Как мешать ASP.NET изменить идентификаторы для использования jQuery

Эта ошибка происходит, потому что вы просто открываете html-документы непосредственно из браузера. Чтобы исправить это, вам нужно будет обслуживать ваш код с веб-сервера и получать доступ к нему на localhost. Если у вас установлен Apache, используйте его для обслуживания ваших файлов. Некоторые IDE имеют встроенные веб-серверы, такие как JetBrains IDE, Eclipse ...

Если у вас установлена ​​Node.Js, вы можете использовать http-server . Просто запустите npm install http-server -g, и вы сможете использовать его в терминале, например http-server C:\location\to\app. Kirill Fuchs

45
задан Andreas Grech 31 January 2009 в 02:01
поделиться

14 ответов

вместо того, чтобы использовать этот селектор

$('#Label1')

использование этот, в основном Вы используете классический asp встроенный серверный код.

$('#<%= Label1.ClientID %>')

это вставит любой идентификатор, который сгенерирован, чтобы быть помещенным как литерал.

, Если бы Вы хотите использовать внешние файлы затем, я предложил бы, чтобы Вы создали obj, который глобален на странице для содержания всех клиентских идентификаторов и затем ссылки, что obj во внешних файлах (не идеальный, но это - решение)

var MyClientIDs = {
    Label1 = '<%= Label1.ClientID %>',
    Label2 = '<%= Label2.ClientID %>',
    Textbox1 = '<%= Textbox1.ClientID %>',
    Textbox2 = '<%= Textbox2.ClientID %>'
};

и затем во внешнем файле можно получить доступ к Label1, например: $('#' + MyClientIDs.Label1)

40
ответ дан Vincenzo Maggio 8 November 2019 в 00:36
поделиться

Вы не должны "препятствовать тому", чтобы asp.net изменил идентификатор управления, для использования jQuery или JavaScript вообще в этом отношении.

идентификатор, который представляется на Вашей странице, является свойством ClientID управления и что Вы устанавливаете на самом управлении, идентификатор. Вы не можете установить свойство ClientID, оно сгенерировано для Вас, и можете, или может не совпасть с Вашим идентификатором. однако, как другие упомянули, можно использовать свойство ClientID любой в aspx:

$('<%= Label1.ClientID %>').html()

или путем регистрации клиентского сценария в коде позади файла с помощью одного из методов ClientScriptManager.

0
ответ дан Omer Bokhari 8 November 2019 в 00:36
поделиться

Можно также создать пользовательский элемент управления, который наследовался Маркировке, которая переопределяет свойство ID, чтобы быть тем, чем Вы хотите, чтобы это было.

2
ответ дан eulerfx 8 November 2019 в 00:36
поделиться

Просто избавьтесь от заполнителя. Или выбор классом или иерархией DOM. Или даже используйте частичное соответствие на идентификаторе как последнее прибежище. Существует много легких, очевидных способов для выбора элемента в jQuery, мы должны отнять от груди нас далеко от наших старых, ужасных привычек ASP.NET.

И Dreas Grech забивает последний гвоздь в крышку гроба. Вы не можете использовать использование внешние файлы сценария с $ ('#< % =label1. % ClientID>'), вводят решения.

Mike

0
ответ дан Mike 8 November 2019 в 00:36
поделиться

Можно использовать ClientID (точно так же, как все остальные сказали), но проблема с тем, который является, что она не может использоваться во внешнем Файле JavaScript.

Так, идеально, вместо того, чтобы использовать идентификатор для ссылки на него из jQuery, используют класс CSS:

<asp:Label ID="Label1" runat="server" Text="test" CssClass="myclass"></asp:Label>

Затем можно сослаться на него как такой:

$(".myclass")
3
ответ дан Andreas Grech 8 November 2019 в 00:36
поделиться

Можно переопределить ClientID и UniqueID как , этот парень сделал .

/// <summary>
/// Override to force simple IDs all around
/// </summary>

public override string UniqueID
{
    get
    {
        return this.ID;
    }
}

/// <summary>
/// Override to force simple IDs all around
/// </summary>

public override string ClientID
{
    get
    {
        return this.ID;
    }
}
2
ответ дан Sampson 8 November 2019 в 00:36
поделиться

Большинство предложений здесь будет работать, но результаты испытаний на коде jQuery показывают, что чистые идентификационные селекторы являются безусловно самыми быстрыми. Тот я чаще всего использую:

$("[id$=origControlId]")

является довольно медленным, но проблема не слишком очевидна, если страница не имеет много средств управления и много jQuery.

С тех пор это довольно безболезненный для присвоения нескольких классов управлению, Вы могли дать каждому CSSClass, который соответствует идентификатору. Так как они затем были бы уникальны (необходимо будет следить за средствами управления типом повторителя, которые генерируют несколько средств управления), Вы могли выбрать классом.

, Например:

<asp:Label ID="Label1" CssClass="Label1 SomeOtherClass" runat="server" Text="test">
</asp:Label>

мог быть выбран исключительно:

$(".Label1")

, Который является почти с такой скоростью, как идентификационный выбор.

я никогда не рассматривал этого:

$('#<%= Label1.ClientID %>')

, но я собираюсь попробовать его!

4
ответ дан CMPalmer 8 November 2019 в 00:36
поделиться

Встроенный код является корректным способом сделать это. Однако это будет изменяться в ASP.NET 4.0. Мы провели некоторое время, добавляя опцию, которая позволяет полный контроль над идентификаторами, которые являются сгенерированной стороной клиента. Ниже некоторые ресурсы в сети об этой функции.

5
ответ дан Matthew M. Osborn 8 November 2019 в 00:36
поделиться

, Если и , только если Вы - контейнерное расположение, никогда не собирается изменяться и , Вы требуете для помещения JavaSctipt/jQuery во внешний файл, Вы могли использовать сгенерированные идентификаторы в своих селекторах jQuery т.е.

$('#ctl00_ContentPlaceHolder1_Label3').html(xml);

, Очевидно, этот подход требует, чтобы Вы узнали то, что сгенерированные идентификаторы будут и требуют осторожности, если Вы когда-нибудь начнете изменять конструкцию сайта/приложения.

Иначе, Ваш лучший опции

1. Использование встроенная разметка серверного кода. Оборотная сторона к этому подходу - то, что Вы не можете поместить свой код js во внешний файл -

$('#<%= Label3.ClientID %>').html(xml);

2. Определяют уникальные классы CSS на каждом управлении, которое необходимо использовать в jQuery, который все еще позволил бы Вам помещать свой код js во внешний файл -

<asp:Label ID="Label3" runat="server" Text="test" CssClass="label3">
</asp:Label>

$('.label3').html(xml);

3. Использование селекторы jQuery для копирования соответствуют исходному идентификатору, который снова, позволил бы Вам помещать свой код js во внешний файл -

$('[id$=Label3]').html(xml);

, Этот селектор jQuery выберет все элементы с атрибутом идентификатор , значение которого заканчивается Label3. Единственная потенциальная оборотная сторона, которую я видел с этим подходом, - то, что в теории, могло быть возможно иметь Элемент управления "метка" с идентификатором Label3 в, говорят, страница Master и также на двух страницах содержания. В этом примере, с помощью селектора jQuery выше соответствовал бы всем трем маркировкам, которые могут иметь нежелательные последствия.

РЕДАКТИРОВАНИЕ:

я думал, что могло бы быть полезно повысить Ваше внимание к управление IDOverride . Страница Example может быть найдена здесь

, Она позволяет Вам указывать, какие средства управления должны иметь свой искаженный идентификатор в произведенной разметке HTML, переопределенной с идентификатором, как дан в .aspx файле при рендеринге страницы HTML. Я только играл с ним кратко с единственным Ведущим устройством Page и Панелями, но это, кажется, работает хорошо. Используя это, Вы могли использовать исходные идентификаторы в своих селекторах jQuery. Знайте однако, что результаты непредсказуемы, если у Вас должны были быть средства управления с теми же идентификаторами на Вашей странице (страницах) Master и странице (страницах) Content, которые объединены для рендеринга HTML для одной страницы.

16
ответ дан Russ Cam 8 November 2019 в 00:36
поделиться

Вы не можете мешать asp.net генерировать те идентификаторы. Это, как это делает вещи.

можно все еще использовать jQuery как так:

$('#<%=label1.ClientID %>').html(xml) 

или

$('[id$=_label1]').html(xml)
20
ответ дан Crescent Fresh 8 November 2019 в 00:36
поделиться

Короткий ответ, не волнуйтесь об использовании идентификаторов asp.net. В asp.net можно добавить собственный атрибут к тегу:

<asp:TexBox ID="myTBox" runat="server" MyCustomAttr="foo" />

Затем в jQuery можно обратиться к этому элементу через:

$("input[MyCustomAttr='foo']")

я делаю это все время с jQuery. Надежда это помогает.

7
ответ дан Notorious2tall 8 November 2019 в 00:36
поделиться

Необходимо передать ClientID управления коду JavaScript (я сомневаюсь, хотя это Label1 переименовано к Label3)

ClientScriptManager.RegisterClientScriptBlock(GetType(), "someKey", 
    "$('#" + Label1.ClientID + "').html(xml);", true);
3
ответ дан devio 8 November 2019 в 00:36
поделиться

Риск очевидного изменения:

<asp:Label ID="Label1" runat="server" Text="test"></asp:Label>

-

<Label ID="Label1" Text="test"></Label> 
1
ответ дан 26 November 2019 в 20:48
поделиться

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

http://www.bytechaser.com/en/articles/ts8t6k5psp/how-to-display-aspnet-controls-with-clean-id-value.aspx

2
ответ дан 26 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: