소개나는 쇼핑 웹 사이트를 구축 할 필요가 대학 프로젝트를 진행하고
ASP.Net 리피터에서 특정 컨트롤에 액세스하는 방법.
저는 현재 다음과 같은 구조의 "장바구니 관리"페이지를 구축하고있다 : 내 질문에 대한 중요한 것은
는 "제품"입니다. "제품"은 ItemTemplate
컨트롤 만 사용하는 ASP.Net 중계기입니다. 리피터는 사용자의 카트에있는 제품 목록으로 채워집니다.
무슨 문제입니까?
"저장"버튼과 관련하여 문제가있는 부분이 있습니다. 사용자는 원하는 각 제품의 수량을 변경할 수 있습니다. 그러나 정보를 데이터베이스에 저장하려면 "저장"단추를 클릭해야합니다.
내 저장 버튼의 onclick 이벤트 내에 수량 입력란에 올바른 숫자로 액세스하는 데 문제가 있습니다.
내 저장 버튼의 모든 OnClick 이벤트에서 올바른 텍스트 상자에 액세스하려면 어떻게해야합니까?
무엇을 시도 했습니까?
처음에는 WebControl.FindControl 메서드를 사용하려고 생각했습니다. 물론 FindControl에는 ID가 필요하며 각 입력란마다 다른 ID가 필요합니다. 이 ID의 문제는, 내가 노력 수정하기 위해
... 먼저
...
는 텍스트 상자 ID와 제품 ID를 결합했습니다.
<asp:TextBox ID='quantity<%#Eval("productId") %>' runat="server" TextMode="Number" min="1" Text='<%#Eval("selectedQuantity") %>' max='<%#Eval("availableQuantity") %>' />
나는 그런 다음 불가능하다는 것을 알았습니다. ID를이 방법으로 설정할 때 "간단한 ID"(예 : "button1")를 사용해야하기 때문입니다. 아마도 코드 숨김에 ID를 설정할 수 있습니다. 둘째
... 그때 리피터의 OnItemCreated 이벤트를 동적으로 X는 제품 ID입니다 텍스트 상자에 "quantityX"의 ID를 설정하는 데 사용하여 시도
. 내가있는 WebControl 속성에 제품 ID를 결합되어 했는가
:
<asp:TextBox ID='quantity' productId='<%#Eval("productId") %>' runat="server" TextMode="Number" min="1" Text='<%#Eval("selectedQuantity") %>' max='<%#Eval("availableQuantity") %>' />
이 후, 나는 다음 "양"의 ID와 TextBoxs을 얻기 위해 FindControl()
방법을 사용하여. TextBox를 찾은 후에는 productId 속성을 가져 와서 그 값을 TextBox ID에 추가합니다.
protected void productsList_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item)
{
TextBox quantity = (TextBox)e.Item.FindControl("quantity");
quantity.ID = String.Format("quantity{0}", quantity.Attributes["productId"]);
}
}
그런 다음 productId 속성에 값이 없음을 알았습니다. 왜냐하면 DataBinding이 발생하지 않았기 때문입니다. 즉, Eval("productId")
이 실행되고 있지 않습니다. 셋째
은 ...
나는 한 차이가 이전과 동일한 착수했습니다. OnItemCreated
이벤트 대신 Repeater의 OnItemDataBound
이벤트를 사용했습니다.
protected void productsList_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item)
{
TextBox quantity = (TextBox)e.Item.FindControl("quantity");
quantity.ID = String.Format("quantity{0}", quantity.Attributes["productId"]);
}
}
부분적으로 작동합니다. 그러나 한 가지 문제가있었습니다. 제품 ID가 가장 큰 제품을 건너 뛰었습니다. (E.X, 제품 4, 32, 68이있는 경우 제품 ID 68은 건너 뜁니다.)
아래 이미지에서 알 수 있듯이 3 가지 제품이 있습니다. TextBox를 분명하게 가리 키기 위해 (렌더링 된대로) 일부 텍스트를 편집했습니다.
존재하는 ID는 1, 32 및 34입니다. 1과 32의 ID 속성을 보면 제품 ID가 추가 된 "수량"이 표시됩니다.
ID 속성은 34입니다. ID 속성은 "수량"입니다.
나는 이제 막 붙어있다.
나는 무엇을 사용하고?
- 비주얼 스튜디오 2017
- .NET 프레임 워크 4.6.1
- 2 계층 웹폼 프로젝트
- 구글 크롬
사용 ASP 컨트롤을. – AsifAli72090
@ Asif.Ali ASP 컨트롤을 사용하고 있습니다 ... OP의 마지막 이미지는 크롬의 개발자 도구에서 렌더링 된 페이지의 스크린 샷입니다. – Tyler
저장 버튼 클릭 이벤트에서 텍스트 상자에 액세스하는 데 문제가 있습니까? – AsifAli72090