복붙노트

[JQUERY] 사용하기 위해서는 ID를 변경하는 ASP.NET을 중지하는 방법 jQuery를

JQUERY

사용하기 위해서는 ID를 변경하는 ASP.NET을 중지하는 방법 jQuery를

해결법


  1. 1.대신 선택기를 사용하여

    대신 선택기를 사용하여

    $('#Label1')
    

    기본적으로 당신은 고전적인 ASP 인라인 서버 측 코드를 사용하고,이 하나를 사용하십시오.

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

    이것은 문자로 배치되도록 생성되는 어떤 ID를 삽입한다.

    그런 다음 외부 파일을 사용하고자하는 경우에 나는 당신이 당신의 클라이언트 ID 모두를 누른 상태에서 외부 파일 내에서 그 OBJ를 참조 할 페이지의 글로벌 인 OBJ 만들 제안 (이상적이지를하지만 솔루션입니다)

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

    다음 외부 파일에 당신이 예를 들어 Label1을 액세스 할 수 있습니다 : $를 ( '#'+ MyClientIDs.Label1)


  2. 2.설정 ClientIDMode = "정적"

    설정 ClientIDMode = "정적"

    <asp:Label ID="myLabel" ClientIDMode="Static" runat="server" Text="testing"></asp:Label>
    

    .NET 4는 지금 당신이 당신의 ClientIDMode를 선택할 수있는 능력을 가지고 :

    입력 : System.Web.UI.ClientIDMode를 ClientID 속성이 생성되는 방법을 나타내는 값입니다.


  3. 3..NET에서 4+ 세트 ClientIDMode = "정적". 이 문제를 해결합니다.

    .NET에서 4+ 세트 ClientIDMode = "정적". 이 문제를 해결합니다.

    예:

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

  4. 4.당신은 그 ID를 생성에서 asp.net을 중지 할 수 없습니다. 즉, 일을 얼마나입니다.

    당신은 그 ID를 생성에서 asp.net을 중지 할 수 없습니다. 즉, 일을 얼마나입니다.

    당신은 여전히 ​​같은 JQuery와 사용할 수 있습니다 :

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

    또는

    $('[id$=_label1]').html(xml)
    

  5. 5.경우에만이있는 거 컨테이너 레이아웃은 결코 변화하려고하지 않습니다 그리고 당신은 당신이 당신의 jQuery를 선택기 즉 내에서 생성 된 ID를 사용할 수, 외부 파일에 자바 스크립트 / jQuery를 넣어 필요한 경우

    경우에만이있는 거 컨테이너 레이아웃은 결코 변화하려고하지 않습니다 그리고 당신은 당신이 당신의 jQuery를 선택기 즉 내에서 생성 된 ID를 사용할 수, 외부 파일에 자바 스크립트 / jQuery를 넣어 필요한 경우

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

    물론,이 방법은 생성 된 ID를하고 당신이 이제까지 사이트 / 응용 프로그램 구조 변경 시작하면주의가 필요합니다 무엇인지 찾을 수 있도록해야합니다.

    그렇지 않으면, 당신의 최선의 옵션은

    1. 인라인 서버 측 코드 마크 업. 이 방법의 단점은 외부 파일에 JS 코드를 삽입 할 수 없다는 것입니다 -

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

    여전히 외부 파일에 JS 코드를 넣을 수있는 것입니다 당신이 jQuery를 사용할 필요가 각 컨트롤에 고유의 CSS 클래스를 정의합니다 -

    <asp:Label ID="Label3" runat="server" Text="test" CssClass="label3">
    </asp:Label>
    
    $('.label3').html(xml);
    

    패턴 3. jQuery를 선택기 다시, 외부 파일에 JS 코드를 삽입 할 수 있도록 할 원래의 ID를 일치 -

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

    이 jQuery를 선택기 값 LABEL3 단부와 속성 ID를 갖는 모든 구성 요소를 선택한다. 나는이 방법으로 볼 수있는 유일한 잠재적 인 단점은 이론적으로는 말의 ID LABEL3와 Label 컨트롤, 마스터 페이지와도 두 컨텐츠 페이지를 가질 수있을 수 있다는 것입니다. 이 예에서, 위의 jQuery 셀렉터를 사용하여 원치 않는 결과를 초래할 수있는 모든 세 개의 레이블을 일치합니다.

    편집하다:

    나는 IDOverride 제어에 관심을 높이기 위해 유용 할 수 있습니다 생각했다. 예제 페이지는 여기에서 찾을 수 있습니다

    그것은 당신이 HTML 페이지를 렌더링 할 때 .ASPX 파일에 주어진대로 ID로 출력 된 HTML 마크 업 오버라이드 (override) 내에서 엉망이 ID를 가지고해야하는 컨트롤을 지정할 수 있습니다. 나는 단지 하나의 마스터 페이지 및 패널로 간단히 연주,하지만 잘 작동이 나타납니다. 이것을 사용하여, 당신은 당신의 jQuery 셀렉터 내에서 원래의 ID를 사용할 수 있습니다. 결과는 당신이 당신의 마스터 페이지 (들)에 동일한 ID를 가진 컨트롤을 가지고 있다면 예측할 수 있다는 점에 유의 한 페이지의 HTML 렌더링 결합되어 컨텐츠 페이지 (들).


  6. 6.짧은 대답은 asp.net ID를 사용하는 방법에 대한 걱정하지 마십시오. asp.net에서는 태그에 자신의 속성을 추가 할 수 있습니다 :

    짧은 대답은 asp.net ID를 사용하는 방법에 대한 걱정하지 마십시오. asp.net에서는 태그에 자신의 속성을 추가 할 수 있습니다 :

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

    그런 다음 JQuery와 당신이 요소를 통해 참조 할 수 있습니다 :

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

    내가 jQuery로이 모든 시간을. 희망이 도움이.


  7. 7.당신은 ID를 사용하는 것보다 클래스 이름을 대신 호출 할 수 있습니다

    당신은 ID를 사용하는 것보다 클래스 이름을 대신 호출 할 수 있습니다

    예를 들어;

    $('.CssClassName'). ...
    

    당신은 MasterPage의 첫 줄이 입력하는 경우 또는 컨트롤의 ID는 변경되지 않습니다 :

    ClientIDMode = "정적"

    예를 들어;

    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="Main_MasterPage" ClientIDMode="Static" %>
    

  8. 8.인라인 코드는 그것을 할 올바른 방법입니다. 그러나이 ASP.NET 4.0에서 변경 될 것입니다. 우리는 클라이언트 측 생성되는 ID를 완벽하게 제어 할 수있는 기능을 추가하는 약간의 시간을 보냈습니다. 다음은이 기능에 대한 웹에 대한 몇 가지 자료입니다.

    인라인 코드는 그것을 할 올바른 방법입니다. 그러나이 ASP.NET 4.0에서 변경 될 것입니다. 우리는 클라이언트 측 생성되는 ID를 완벽하게 제어 할 수있는 기능을 추가하는 약간의 시간을 보냈습니다. 다음은이 기능에 대한 웹에 대한 몇 가지 자료입니다.


  9. 9.제안의 대부분은 여기에 작동하지만 jQuery 코드 쇼에 테스트 결과 순수 ID 선택기는 지금까지 가장 빠른 것을. 내가 가장 자주 사용하는 하나

    제안의 대부분은 여기에 작동하지만 jQuery 코드 쇼에 테스트 결과 순수 ID 선택기는 지금까지 가장 빠른 것을. 내가 가장 자주 사용하는 하나

    $("[id$=origControlId]")
    

    매우 느리지 만 페이지가 많은 컨트롤과 jQuery를 많이하지 않는 한 문제가 너무 분명하지 않습니다.

    이 공정 제어에 할당 여러 클래스에 통증이 있기 때문에, 당신은 ID와 일치하는 각 하나 CSSClass을 줄 수 있습니다. 그럼 그들이 독특한 것 때문에 당신이 클래스에 의해 선택할 수 있습니다 (여러 컨트롤을 생성 리피터 형 컨트롤을 볼 수있을 것이다).

    예를 들면 :

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

    에 의해 고유하게 선택 될 수있다 :

    $(".Label1")
    

    어떤 거의 빨리 ID를 선택 같습니다.

    나는 이것을 고려하지 않았었다 :

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

    그러나 나는 그것을 시도거야!


  10. 10.당신은 (Label1을가 LABEL3로 이름이 변경됩니다 것을 비록 내가 의심) 자바 스크립트 코드로 컨트롤의 클라이언트 ID를 통과해야

    당신은 (Label1을가 LABEL3로 이름이 변경됩니다 것을 비록 내가 의심) 자바 스크립트 코드로 컨트롤의 클라이언트 ID를 통과해야

    ClientScriptManager.RegisterClientScriptBlock(GetType(), "someKey", 
        "$('#" + Label1.ClientID + "').html(xml);", true);
    

  11. 11.당신은 클라이언트 ID를 사용할 수 있습니다 (다만 사람들처럼 다른했다)하지만의 문제는 외부 자바 스크립트 파일에 사용될 수 없다는 것이다.

    당신은 클라이언트 ID를 사용할 수 있습니다 (다만 사람들처럼 다른했다)하지만의 문제는 외부 자바 스크립트 파일에 사용될 수 없다는 것이다.

    따라서, 이상적으로, 대신 jQuery를에서이를 참조하기 위해 ID를 사용하는 CSS 클래스를 사용합니다 :

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

    그럼 당신은 같은처럼 참조 할 수 있습니다 :

    $(".myclass")
    

  12. 12.이 녀석이 그랬던 것처럼 당신은 클라이언트 ID와가 UniqueID을 대체 할 수 있습니다.

    이 녀석이 그랬던 것처럼 당신은 클라이언트 ID와가 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;
        }
    }
    

  13. 13.또한 ID 등록 정보를 대체 레이블에서 상속은 당신이 원하는 무엇을 수있는 사용자 지정 컨트롤을 만들 수 있습니다.

    또한 ID 등록 정보를 대체 레이블에서 상속은 당신이 원하는 무엇을 수있는 사용자 지정 컨트롤을 만들 수 있습니다.


  14. 14.이것은 제어가 렌더링 될 때 원래의 ID와 asp.net ID를 대체함으로써 달성 될 수있다. 이것은 매우 간단하고 사용자 지정 컨트롤 세트를 생성하여 수행 할 수 있습니다.

    이것은 제어가 렌더링 될 때 원래의 ID와 asp.net ID를 대체함으로써 달성 될 수있다. 이것은 매우 간단하고 사용자 지정 컨트롤 세트를 생성하여 수행 할 수 있습니다.

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


  15. 15.명백히 명백한 변화되는 위험을 무릅 :

    명백히 명백한 변화되는 위험을 무릅 :

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

    ...에

    <Label ID="Label1" Text="test"></Label> 
    

  16. 16.당신은 버튼의 속성 ClientIDMode = "정적"을 둘 필요, ID가 런타임에서 동일합니다이 보조금은, 당신이 자바 스크립트 객체를 얻기 위해 필요합니다.

    당신은 버튼의 속성 ClientIDMode = "정적"을 둘 필요, ID가 런타임에서 동일합니다이 보조금은, 당신이 자바 스크립트 객체를 얻기 위해 필요합니다.


  17. 17.당신은 그 문제에 관해서 전혀 사용 JQuery와 또는 자바 스크립트에 위해 제어 ID를 변경하는 asp.net을 "방지"할 필요가 없습니다.

    당신은 그 문제에 관해서 전혀 사용 JQuery와 또는 자바 스크립트에 위해 제어 ID를 변경하는 asp.net을 "방지"할 필요가 없습니다.

    페이지에 렌더링됩니다 ID는 컨트롤의 ClientID 속성이며, 당신이 컨트롤 자체에 설정하는 것은 ID입니다. 당신은 당신을 위해 생성 된 것 및 또는 ID와 동일 할 수도 있고 그렇지 않을 수도 ClientID 속성을 설정할 수 없습니다. 그러나, 다른 언급으로 당신은 당신의 영문에 하나 ClientID 속성을 사용할 수 있습니다 :

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

    또는 ClientScriptManager 방법 중 하나를 사용하여 파일 뒤에 코드에서 클라이언트 스크립트를 등록하여.


  18. 18.그냥 자리를 제거. 또는 클래스 또는 DOM 계층 구조를 선택합니다. 심지어 마지막 수단으로 ID에 부분적인 일치를 사용합니다. jQuery를에서 요소를 선택하는 많은 쉬운, 청소 방법이 있습니다, 우리는 우리의 오래된 못생긴 ASP.NET 습관에서 자신을 멀리 유아해야합니다.

    그냥 자리를 제거. 또는 클래스 또는 DOM 계층 구조를 선택합니다. 심지어 마지막 수단으로 ID에 부분적인 일치를 사용합니다. jQuery를에서 요소를 선택하는 많은 쉬운, 청소 방법이 있습니다, 우리는 우리의 오래된 못생긴 ASP.NET 습관에서 자신을 멀리 유아해야합니다.

    그리고 Dreas GRECH는 관에 마지막 못을 넣어. 당신은 $ ( '# <% = label1.ClientID %>') 유형의 솔루션을 사용하는 외부 스크립트 파일을 사용할 수 없습니다.

    마이크


  19. 19.당신은 여전히 ​​자리 표시 자 태그에 자리하고 설정 ClientIDMode를 사용할 수 있습니다 :

    당신은 여전히 ​​자리 표시 자 태그에 자리하고 설정 ClientIDMode를 사용할 수 있습니다 :

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

    포함 된 컨트롤 ID의 어느 것도 변경되지 않습니다.


  20. 20.간단한 컨트롤 클래스를 오버라이드 (override)과 함께. 여기에 HtmlGenericControl와 예입니다하지만 당신은 어떤 ASP.Net 제어와 함께 할 수 있습니다 :

    간단한 컨트롤 클래스를 오버라이드 (override)과 함께. 여기에 HtmlGenericControl와 예입니다하지만 당신은 어떤 ASP.Net 제어와 함께 할 수 있습니다 :

    public class NoNamingContainerControl : HtmlGenericControl
    {
        public NoNamingContainerControl(string tag) : base(tag) { }
        public override string ClientID
        {
            get
            {
                return this.ID;
            }
        }
    }
    
  21. from https://stackoverflow.com/questions/497802/how-to-stop-asp-net-from-changing-ids-in-order-to-use-jquery by cc-by-sa and MIT license