링크버튼 클릭 이벤트 핸들러가 실행되지 않음
-
01-07-2019 - |
문제
AJAX dropdownextender를 사용하여 사용자 정의 드롭다운 목록을 만들고 있습니다.내 드롭 패널 안에는 내 옵션에 대한 링크 버튼이 있습니다.
<asp:Label ID="ddl_Remit" runat="server" Text="Select remit address."
Style="display: block; width: 300px; padding:2px; padding-right: 50px; font-family: Tahoma; font-size: 11px;" />
<asp:Panel ID="DropPanel" runat="server" CssClass="ContextMenuPanel" Style="display :none; visibility: hidden;">
<asp:LinkButton runat="server" ID="Option1z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />
<asp:LinkButton runat="server" ID="Option2z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />
<asp:LinkButton runat="server" ID="Option3z" Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem" />-->
</asp:Panel>
<ajaxToolkit:DropDownExtender runat="server" ID="DDE"
TargetControlID="ddl_Remit"
DropDownControlID="DropPanel" />
그리고 이것은 잘 작동합니다.이제 내가 해야 할 일은 이 드롭다운 목록을 동적으로 채우는 것입니다.최선의 시도는 다음과 같습니다.
private void fillRemitDDL()
{
//LinkButton Text="451 Stinky Place Drive <br/>North Nowhere, Nebraska 20503-2343 " OnClick="OnSelect" CssClass="ContextMenuItem"
DAL_ScanlineTableAdapters.SL_GetRemitByScanlineIDTableAdapter ta = new DAL_ScanlineTableAdapters.SL_GetRemitByScanlineIDTableAdapter();
DataTable dt = (DataTable)ta.GetData(int.Parse(this.SLID));
if (dt.Rows.Count > 0)
{
Panel ddl = this.FindControl("DropPanel") as Panel;
ddl.Controls.Clear();
for (int x = 0; x < dt.Rows.Count; x++)
{
LinkButton lb = new LinkButton();
lb.Text = dt.Rows[x]["Remit3"].ToString().Trim() + "<br />" + dt.Rows[x]["Remit4"].ToString().Trim() + "<br />" + dt.Rows[x]["RemitZip"].ToString().Trim();
lb.CssClass = "ContextMenuItem";
lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");
ddl.Controls.Add(lb);
}
}
}
내 문제는 스크립트를 실행하는 이벤트를 얻을 수 없다는 것입니다!위의 코드를 시도하고 교체했습니다.
lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");
~와 함께
lb.Click += new EventHandler(OnSelect);
그리고 또한
lb.OnClientClick = "setDDL(" + lb.Text + ")");
클라이언트 측에서 경고를 사용하여 분기를 테스트하고 있지만 아무것도 얻지 못합니다.
편집하다:일반 앵커를 추가하고 싶지만 asp.net 컨트롤에 요소를 추가할 수 있을 것 같습니다.또한 그런 식으로 추가하기 위해 서버 코드에서 클라이언트 측 div에 액세스할 수도 없습니다.이벤트와 함께 일종의 컨트롤을 사용해야 할 것입니다.내 setDLL 함수는 다음과 같습니다.
function setDDL(var)
{
alert(var);
document.getElementById('ctl00_ContentPlaceHolder1_Scanline1_ddl_Remit').innerText = var;
}
또한 함수 호출에서 문자열 변수를 꺼냈습니다(예:~에서
lb.Attributes.Add("onclick", "setDDL(" + lb.Text + ")");
에게
lb.Attributes.Add("onclick", "setDDL()");
해결책
setDDL 메소드가 스크립트에서 무엇을 하는지 잘 모르겠지만 링크 버튼 중 하나를 클릭하면 실행될 것입니다.서버 측 컨트롤에 대한 참조가 없기 때문에 .net 링크 버튼 대신 일반 html 앵커를 삽입하는 것이 더 나을 것이라고 생각합니다.그런 다음 setDDL 메소드를 사용하여 데이터 교환을 처리할 수 있습니다.또한 따옴표 없이 리터럴 문자열 데이터를 배치하면 스크립트 문제(예: 메소드 호출 없음 + 페이지 오류)가 발생하므로 setDDL 호출 내에 배치하는 문자열을 인용할 수 있습니다.
다른 팁
좋아, 리터럴을 사용하여 onclick이 포함된 앵커 태그를 생성했는데 잘 작동하는 것 같습니다.정말 감사합니다.
추가는 아마도 다음과 같을 것입니다(문자열 주위에 ''를 추가하고 ;자바스크립트 명령문 끝까지).
lb.Attributes.Add("onclick", "setDDL('" + lb.Text + "');");
또는!
설정 OnClientClick 속성 링크버튼에서