문제

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 속성 링크버튼에서

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top