ASP를 정지하는 방법JQuery를 사용하기 위해 ID를 변경하는 NET
내 웹 페이지에 이 레이블 컨트롤이 있습니다.
<asp:Label ID="Label1" runat="server" Text="test"></asp:Label>
그리고 컨트롤의 ID를 렌더링한 페이지가 다음과 같이 바뀌었을 때
<span id="ctl00_ContentPlaceHolder1_Label3">test</span>
이와 같은 jQuery 작업을 수행하기 위해 asp.net에서 ID를 변경하지 않도록 하려면 어떻게 해야 합니까?
$('#label1').html(xml);
간단한 답변:
★★ClientIDMode="Static"
<asp:Label ID="myLabel" ClientIDMode="Static" runat="server" Text="testing"></asp:Label>
장황한 답변:
.NET 4에서는 클라이언트를 선택할 수 있게 되었습니다.ID 모드:
유형: 시스템.Web.UI.클라이언트ID 모드
속성이 생성되는 방법을 아이디 성 id id id id 。
(R) 아이디
(Client.각 부모 명명 컨테이너의 ID 값과 컨트롤의 ID 값을 연결하여 ID 값을 생성한다.컨트롤의 여러 인스턴스가 렌더링되는 데이터 바인딩 시나리오에서는 컨트롤의 ID 값 앞에 증분 값이 삽입됩니다.각 세그먼트는 밑줄 문자(_)로 구분됩니다.ASP 되었습니다.ASP 다 、 NET 4 4
(Client.아이디 아이디 아이디 아이디 아이디.컨트롤이 이름 지정 컨테이너인 경우 해당 컨트롤은 포함된 컨트롤에 대한 이름 지정 컨테이너 계층의 맨 위로 사용됩니다.(Predictable)
이 알고리즘은 데이터 바인딩 컨트롤에 있는 컨트롤에 사용됩니다.(Client.아이디 id id id id id id id id 。ID " " " " " " " " " " 이 여러 " " " " " 에서 은 " " " " " " 입니다.IDRow Suffix 。GridView는 GridView를 사용합니다. " " " IDrow " 데이터 필드값이 가 끝에 됩니다.IDRow Suffix 。 데이터 필드 값 대신 일련 번호가 끝에 추가됩니다.이 숫자는 0부터 시작하여 각 행마다 1씩 증가합니다.각 세그먼트는 밑줄 문자(_)로 구분됩니다.★★★★
의 기능을 합니다.Naming Container 'IDMode' 이름 지정.이것이 기본값입니다.
이 셀렉터를 사용하는 대신
$('#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)
4+ 。NET 4+ 세ClientIDMode="Static"
이치노
예:
<asp:Label ID="Label1" ClientIDMode="Static" runat="server" Text="test"></asp:Label>
asp.net가 이러한 ID를 생성하는 것을 막을 수는 없습니다.그게 일이 돌아가는 방식이야.
다음과 같이 jquery를 사용할 수 있습니다.
$('#<%=label1.ClientID %>').html(xml)
또는
$('[id$=_label1]').html(xml)
컨테이너 레이아웃이 변경되지 않고 JavaSctipt/j를 저장해야 하는 경우에만외부 파일에서 쿼리하면 jQuery 선택기 내에서 생성된 ID를 사용할 수 있습니다.
$('#ctl00_ContentPlaceHolder1_Label3').html(xml);
이 방법에서는 생성된 ID가 무엇인지 확인해야 하며 사이트/애플리케이션 구축을 변경할 경우 주의가 필요합니다.
그렇지 않은 경우 가장 좋은 옵션은 다음과 같습니다.
1. 인라인 서버 측 코드 마크업을 사용합니다.이 접근법의 단점은 외부 파일에 js 코드를 넣을 수 없다는 것입니다.
$('#<%= Label3.ClientID %>').html(xml);
2. jQuery에서 사용해야 하는 각 컨트롤에 고유한 CSS 클래스를 정의합니다.이러한 클래스에서는 js 코드를 외부 파일에 넣을 수 있습니다.
<asp:Label ID="Label3" runat="server" Text="test" CssClass="label3">
</asp:Label>
$('.label3').html(xml);
3. jQuery 셀렉터를 사용하여 원래 ID와 패턴을 일치시킵니다.이 경우에도 외부 파일에 js 코드를 넣을 수 있습니다.
$('[id$=Label3]').html(xml);
이 jQuery 실렉터는 값이 Label3으로 끝나는 속성 ID를 가진 모든 요소를 선택합니다.이 접근법의 유일한 잠재적인 단점은 이론상으로는 마스터 페이지와 2개의 콘텐츠 페이지에 ID Label3의 라벨 컨트롤을 가질 수 있다는 것입니다.이 예에서는 위의 jQuery 셀렉터를 사용하면 3개의 라벨이 모두 일치하므로 바람직하지 않은 결과가 발생할 수 있습니다.
편집:
아이도버라이드 컨트롤에 대한 관심을 높이는 게 도움이 될 것 같아서요.예제 페이지는 여기에서 찾을 수 있습니다.
HTML 페이지를 렌더링할 때 출력되는 HTML 마크업 내에서 어떤 컨트롤이 .aspx 파일에 지정된 id로 덮어쓰는지 지정할 수 있습니다.1개의 마스터 페이지와 패널로 잠시 플레이한 적이 있습니다만, 정상적으로 동작하고 있는 것 같습니다.이를 사용하여 jQuery 실렉터 내에서 원래 ID를 사용할 수 있습니다.그러나 마스터 페이지와 내용 페이지에 동일한 ID를 가진 컨트롤이 한 페이지에 대한 HTML을 렌더링하기 위해 결합된 경우 결과를 예측할 수 없습니다.
간단히 말하면, asp.net ID를 사용하는 것에 대해 걱정하지 마십시오.asp.net 에서는 태그에 자신의 Atribute를 추가할 수 있습니다.
<asp:TexBox ID="myTBox" runat="server" MyCustomAttr="foo" />
다음으로 jquery에서 다음 방법으로 이 요소를 참조할 수 있습니다.
$("input[MyCustomAttr='foo']")
항상 jQuery와 함께 합니다.도움이 됐으면 좋겠다.
ID를 사용하는 대신 클래스 이름을 호출할 수 있습니다.
예를 들어,
$('.CssClassName'). ...
또는 MasterPage의 첫 번째 줄에 이것을 입력해도 컨트롤 ID는 변경되지 않습니다.
ClientIDMode="Static"
예를 들어,
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="Main_MasterPage" ClientIDMode="Static" %>
인라인 코드가 올바른 방법입니다.단, ASP에서는 변경될 예정입니다.NET 4.0.생성된 ID를 완전히 제어할 수 있는 기능을 추가하는 데 시간이 걸렸습니다.다음은 이 기능에 대한 웹 리소스입니다.
- http://blog.osbornm.com/archive/2009/01/06/asp.net-4.0-clientid-overview-again.aspx
- http://channel9.msdn.com/shows/10-4/10-4-Episode-3-ASPNET-WebForms-40/
여기에 제시된 제안의 대부분은 유효하지만, jQuery 코드의 테스트 결과에 따르면 순수 ID 선택기가 가장 빠른 것으로 나타났습니다.가장 자주 사용하는 것은 다음과 같습니다.
$("[id$=origControlId]")
매우 느리지만 페이지에 많은 컨트롤과 많은 jQuery가 없는 한 문제는 그다지 명백하지 않습니다.
컨트롤에 여러 클래스를 할당하는 것은 매우 간단하므로 ID와 일치하는 CSSClass를 각 클래스에 지정할 수 있습니다.그러면 고유하기 때문에(여러 컨트롤을 생성하는 리피터 유형의 컨트롤을 감시해야 함), 클래스별로 선택할 수 있습니다.
예를 들어 다음과 같습니다.
<asp:Label ID="Label1" CssClass="Label1 SomeOtherClass" runat="server" Text="test">
</asp:Label>
다음을 통해 고유하게 선택할 수 있습니다.
$(".Label1")
ID 선택과 거의 같은 속도입니다.
이런 건 생각해 본 적이 없어요
$('#<%= Label1.ClientID %>')
한번 해보도록 하겠습니다.
컨트롤의 클라이언트를 통과해야 합니다.javascript 코드에 대한 ID(Label1이 Label3으로 이름이 변경되는 것은 의심됩니다)
ClientScriptManager.RegisterClientScriptBlock(GetType(), "someKey",
"$('#" + Label1.ClientID + "').html(xml);", true);
를 사용할 수 있습니다.ClientID
(다른 모든 사람이 말한 것처럼) 하지만 문제는 외부 JavaScript 파일에서 사용할 수 없다는 것입니다.
따라서 이상적으로는 ID를 사용하여 jQuery에서 참조하는 대신 CSS 클래스를 사용합니다.
<asp:Label ID="Label1" runat="server" Text="test" CssClass="myclass"></asp:Label>
그런 다음 다음과 같이 참조할 수 있습니다.
$(".myclass")
클라이언트를 덮어쓸 수 있습니다.ID와 일의이 친구가 한 것처럼 신분증이야
/// <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;
}
}
원하는 ID 속성을 재정의하는 레이블에서 상속하는 사용자 정의 컨트롤을 작성할 수도 있습니다.
이를 위해서는 컨트롤 렌더링 시 asp.net ID를 원래 ID로 바꿉니다.이것은 매우 쉽고 커스텀컨트롤 세트를 작성함으로써 실행할 수 있습니다.
명백한 변화를 감수해야 합니다.
<asp:Label ID="Label1" runat="server" Text="test"></asp:Label>
로.
<Label ID="Label1" Text="test"></Label>
속성을 .ClientIDMode="Static"
버튼에서 이 ID는 실행 시 동일하며 Javascript에서 객체를 가져오는 데 필요합니다.
jquery 또는 javascript를 사용하기 위해 asp.net에서 컨트롤 ID를 변경하지 않도록 할 필요가 없습니다.
페이지에 렌더링되는 ID는 클라이언트입니다.컨트롤의 ID 속성 및 컨트롤 자체에 설정하는 것은 ID입니다. 클라이언트를 설정할 수 없습니다.ID 속성은 사용자를 위해 생성되며 ID와 동일하거나 동일하지 않을 수 있습니다.단, 다른 사용자가 언급한 바와 같이 클라이언트를 사용할 수 있습니다.aspx의 ID 속성:
$('<%= Label1.ClientID %>').html()
또는 ClientScriptManager 메서드 중 하나를 사용하여 클라이언트스크립트를 파일 뒤의 코드에 등록합니다.
자리 표시자만 없애면 돼또는 클래스 또는 DOM 계층별로 선택합니다.또는 마지막 수단으로 ID의 부분 일치를 사용할 수도 있습니다.jQuery에는 요소를 선택하는 쉽고 깨끗한 방법이 많이 있습니다.오래된 추악한 ASP에서 벗어날 필요가 있습니다.NET 습관
그리고 드레이스 그레흐는 관에 마지막 못을 박았다.$('#<%=label1)에는 외부 스크립트 파일을 사용할 수 없습니다.클라이언트 ID %>' 를 입력합니다.
마이크
플레이스홀더를사용하고클라이언트를설정할수 있습니다.PlaceHolder 태그의 IDMode:
<asp:ContentPlaceHolder ID="BodyContent" runat="server" ClientIDMode="Static">
</asp:ContentPlaceHolder>
포함된 컨트롤 ID는 변경되지 않습니다.
제어 클래스를 재정의하여 간단합니다.다음은 HtmlGenericControl을 사용한 예입니다만, 임의의 ASP로 실행할 수 있습니다.네트워크 관리:
public class NoNamingContainerControl : HtmlGenericControl
{
public NoNamingContainerControl(string tag) : base(tag) { }
public override string ClientID
{
get
{
return this.ID;
}
}
}
언급URL : https://stackoverflow.com/questions/497802/how-to-stop-asp-net-from-changing-ids-in-order-to-use-jquery
'sourcecode' 카테고리의 다른 글
Wordpress 플러그인 슬라이더 회전 오류 (0) | 2023.02.23 |
---|---|
Python에서 JSON 출력 색칠하기 (0) | 2023.02.23 |
React Native에서 누를 때 버튼 스타일 변경 (0) | 2023.02.23 |
jquery를 사용하여 단추를 동적으로 추가하는 방법 (0) | 2023.02.23 |
PDF Blob - 팝업창에 콘텐츠가 표시되지 않음 (0) | 2023.02.23 |