2013-09-16 2 views
0

나는 "is-active"라는 클래스를 가지고 있으며, 사용자가 클릭 한 링크를 기반으로 메인 콘텐츠에 nav에서 튀어 나온 색깔의 화살표가 있습니다. 이 코드는 foreach을 실행하고 데이터베이스에서 모든 범주를 가져옵니다. "is-active"클래스가 현재 링크에 대해서만 표시되도록하려면 어떻게합니까? 나는 그것이 openList 컨트롤에 넣은 이후로 작동한다는 것을 알고 있으며 5 가지 범주 모두에 표시됩니다. 선택한 범주에만 표시되도록하는 방법을 모르겠습니다.C# 코드에서 선택된 링크에 대해서만 클래스를 추가하는 방법은 무엇입니까?

jQuery를 첨부하여 시도했지만, linkbutton을 추가하는 것은 코드에서 모두 완료되므로 두 가지를 첨부하는 방법을 모르겠습니다. 이것이 유일한 방법입니까 아니면 다른 방법입니까?

도움을 주셔서 감사합니다.

는 아래 카테고리와 링크 버튼에 대한 내 코드입니다 :

protected override void CreateChildControls() 
{ 
    LiteralControl openingDiv = new LiteralControl("<div id='MainPanel'>"); 
    LiteralControl closingDiv = new LiteralControl("</div>"); 

    this.Controls.Add(openingDiv); 

    foreach (DataRow dr in ds.Tables[0].Rows) 
    { 
     LiteralControl openList = new LiteralControl("<li class='" + dr["CategoryColor"].ToString() + "'>"); 
     LiteralControl closeList = new LiteralControl("</li>");     

     Label lblNumber = new Label(); 

     LinkButton myLinkButton = new LinkButton(); 

     myLinkButton.Text = "<span class='number'>" + dr["CategoryNumber"] + "</span>"+ dr["CategoryName"].ToString(); 
     myLinkButton.CommandArgument = dr["Category_ID"].ToString(); 
     myLinkButton.Click += myLinkButton_Click; 

     this.Controls.Add(openList); 
     this.Controls.Add(myLinkButton); 
     this.Controls.Add(closeList); 
    } 
    this.Controls.Add(closingDiv); 
} 
void myLinkButton_Click(object sender, EventArgs e) 
{ 
    LinkButton btn = (LinkButton)(sender); 
    Session["CategoryID"] = btn.CommandArgument; 

    Response.Redirect(Request.RawUrl); 
} 
+0

"현재 링크"는 어떻게 정의합니까? – Krishna

+0

귀하의 질문을 이해하지 못해 죄송하지만 링크 버튼은 프로그래밍 방식으로 생성됩니다. 사용자가 탐색 링크 버튼 중 하나를 클릭하면 해당 항목의 내용을 반영하도록 업데이트 패널을 업데이트합니다. 내 문제는 5 개의 링크 버튼 중 하나를 클릭하면 사용자가 활성 링크임을 알 수 있도록 링크 버튼에서 확장해야하는 작은 화살표 이미지가 있다는 것입니다. – Peter

+0

좋아요, 패널을 업데이트하는 동안 클래스를 추가 할 수 있습니다. (또는) [.ajaxComplete()] (http://api.jquery.com/ajaxComplete/)를 사용하여 이벤트를 처리 할 수 ​​있습니다. – Krishna

답변

1

그 까다로운 때문에 페이지가 viewstate가 재현 버튼을 클릭 핸들러에 response.redirecting. 이것은 귀하의 페이지가 항상 신선하고 사용자가 클릭 한 링크를 잃어버린 사실을 의미합니다.

해결 방법으로 response.redirect 전에 세션 변수에 링크 ID를 삽입 한 다음 페이지가 다시로드 될 때이를 호출 할 수 있습니다. 다음 루프에서 세션 변수가 현재 버튼 instance.id와 일치하면 cssclass를 is-active로 설정합니다.

다른 페이지의 혼란을 피하기 위해 cssclass를 is-active로 설정 한 후에도 세션 변수를 지워야합니다.

또한 시스템이 자동으로 ID를 생성하기 때문에 컨트롤 트리에 버튼을 추가 한 후에 ID 비교를 수행해야합니다. 원한다면 나는 완전한 예제를 줄 수있다.

이 방법은 해결 방법이며 다른 방법을 사용하는 것이 가장 좋습니다. 이것은 내가 리다이렉트 대신에 ispostback 래퍼를 사용한다면 포스트 백에서 id를 isactive로 설정하는 것이 훨씬 쉽다는 것을 의미합니다.

페이지 라이프 사이클은 특히 숙련 된 사람이되기를 원한다면 .net에서 머리를 쓰는 것이 중요합니다. 특히 아약스 업데이트 패널을 사용하는 것이 좋습니다. 다음 내용을 읽어보십시오. http://msdn.microsoft.com/en-us/library/ms178472(VS.100).aspx 많은 정보가 필요하므로 나중에 사용하기 위해 즐겨 찾기에 추가하십시오.

+0

링크가 마스터 페이지에 있습니다. 그러나 그것들은'UpdatePanel' 컨트롤의 내용에 영향을줍니다. 이 말은 당신이 언급 한 모든 것을 바꿀 수 있습니까? 그렇다면 추가 코드를 게시 할 수 있습니다. 고맙습니다. – Peter

+0

위의 내용은 마스터 페이지의 링크가있는 업데이트 패널에서 계속 작동합니다. (왜냐하면 당신은 적절한 ajax 부분적인 포스트 백 기능을 사용하지 않기 때문이다 - response.redirect() 때문에). 제안 된 isPostback 랩퍼를 사용 중이면 panel을 호출합니다.귀하의 isPostback 래퍼에서 update()하지만, 그냥 리디렉션 때문에, 다른 일을 할 필요가 없습니다. – FlemGrem

+0

UpdatePanel 내부에서'Response.Redirect'를하고 있습니까? 이것도 어떻게 작동합니까? –

관련 문제