Как остановить ASP.NET от изменения идентификаторов, чтобы использовать jQuery - PullRequest
45 голосов
/ 31 января 2009

У меня есть этот элемент управления ярлыком на моей веб-странице

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

И когда страница отображается, идентификатор элемента управления меняется на что-то вроде этого

  <span id="ctl00_ContentPlaceHolder1_Label3">test</span>

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

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

Ответы [ 20 ]

3 голосов
/ 31 января 2009

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

ClientScriptManager.RegisterClientScriptBlock(GetType(), "someKey", 
    "$('#" + Label1.ClientID + "').html(xml);", true);
2 голосов
/ 31 января 2009

Вы можете переопределить 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 голосов
/ 31 января 2009

Вы также можете создать пользовательский элемент управления, наследующий от Label, который переопределяет свойство идентификатора так, как вы хотите.

2 голосов
/ 20 июля 2010

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

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

1 голос
/ 11 февраля 2016

Вам нужно поместить свойство ClientIDMode="Static" в вашу кнопку, это дает идентификатор будет таким же во время выполнения, это то, что вам нужно, чтобы получить объект в Javascript.

1 голос
/ 20 июля 2010

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

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

до

<Label ID="Label1" Text="test"></Label> 
0 голосов
/ 13 июля 2017

Простой, с переопределением класса управления. Вот пример с HtmlGenericControl, но вы можете сделать это с любым элементом управления ASP.Net:

public class NoNamingContainerControl : HtmlGenericControl
{
    public NoNamingContainerControl(string tag) : base(tag) { }
    public override string ClientID
    {
        get
        {
            return this.ID;
        }
    }
}
0 голосов
/ 17 февраля 2017

Вы все еще можете использовать PlaceHolders и установить ClientIDMode в теге PlaceHolder:

<asp:ContentPlaceHolder ID="BodyContent" runat="server" ClientIDMode="Static">        
</asp:ContentPlaceHolder>

Ни один из идентификаторов элементов управления не будет изменен.

0 голосов
/ 31 января 2009

вам не нужно «запрещать» asp.net изменять идентификатор элемента управления, чтобы использовать jquery или javascript вообще.

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

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

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

0 голосов
/ 31 января 2009

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

И Дреас Греч положил последний гвоздь в гроб. Нельзя использовать внешние файлы сценариев с решениями типа $ ('# <% = label1.ClientID%>').

Майк

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