2010-01-21 3 views
1

내 ASP.NET 웹 사이트의 기본 메뉴에 문제가 있습니다. 내가 원하는 것은 사용자가 링크를 클릭 할 때 사용자가 다른 링크를 클릭 할 때까지 검정색으로 변경되고 검정색으로 유지되어야한다는 것입니다.ASP.NET의 활성 링크 스타일

다른 말로하면, 선택한 링크를 강조하고 싶습니다.

지금까지는 JavaScript 대신 jQuery를 사용하는 것이 좋습니다.하지만 문제는 스타일 포스트가 페이지 포스트 백에 남아 있다는 것입니다.

나의 현재 자바 스크립트 :

<script type="text/javascript"> 
    var last = "none"; 
    function LinkSelector(link) { 
     if (last != "none") { 
      document.getElementById(last).className = "NormalLink"; 
     } 
     document.getElementById(link).className = "ActiveLink"; 
     last = link; 
    } 
</script> 

내가 쓴, 그것은 확실히 클릭하면 클래스 이름을 변경하지만 새 페이지가로드 될 때 그런 식으로 남아 dosn't.

누구나 해결 방법이 있습니까? :)

미리 감사드립니다.

모든 최선을,

보 일반적으로

+0

또한 메뉴와 자바 스크립트가 MasterPage에 있음을 지적해야합니다. – bomortensen

답변

4

, 나는 ASP 사용합니다 : Menu 컨트롤을. 메뉴 항목에 대한 적절한 제어를 제공합니다.

예를 들어, 여기 마스터 페이지에 덤프하고 초기 페이지가 손상되는 동안 실행되는 일반적인 방법이 있습니다. 이 메서드는 메뉴 컨트롤의 메뉴 항목을 반복하고 현재 URL에 해당하는 메뉴 항목을 선택합니다.

protected void Page_Load(object sender, EventArgs e) { 
     if (!Page.IsPostBack) { 
      SelectMenuItem(); 
     } 
    } 

    private void SelectMenuItem() { 
      string rawurl = Request.RawUrl.ToLower(); 

      rawurl = rawurl.Substring(rawurl.LastIndexOf("/") + 1); 
      if (rawurl.IndexOf("?") >= 0) 
       rawurl = rawurl.Substring(0, rawurl.IndexOf("?")); 

      foreach (MenuItem mi in mnuMain.Items) { 
       if (mi.ChildItems.Count == 0) { 
        if (mi.Value == rawurl) { 
         mi.Selected = true; 
         break; 
        } 
       } 
       else { 
        foreach (MenuItem cmi in mi.ChildItems) { 
         if (cmi.Value == rawurl) { 
          mi.Selected = true; 
          break; 
         } 
        } 
        if (mi.Selected) 
         break; 
       } 
      } 
     } 

다음은 ASP 메뉴 컨트롤에있는 몇 가지 메뉴 항목입니다. Value 속성을 사용하여 위의 메소드에서 요청 된 URL과 관련된 메뉴 항목을 표시 할 수 있습니다.

<Items> 
    <asp:MenuItem Text="Forms" Value="authorization"> 
    <asp:MenuItem Text="New Authorization Form" Value="createauthform.aspx" NavigateUrl="~/CreateAuthForm.aspx"></asp:MenuItem> 
    <asp:MenuItem Text="Manage My Authorization Forms" Value="myrequests.aspx" NavigateUrl="~/MyRequests.aspx"></asp:MenuItem> 
    <asp:MenuItem Text="Audit Attendance Form" Value="auditform.aspx" NavigateUrl="~/AuditForm.aspx"></asp:MenuItem> 
    <asp:MenuItem Text="Tax Determination Statement" Value="taxstatement.aspx" NavigateUrl="~/TaxStatement.aspx"></asp:MenuItem> 
    </asp:MenuItem> 
</Items> 
+0

안녕 Jagd, 답장을 보내 주셔서 감사합니다. 나는 그것을 올바르게 얻으려고하고있다. Menu 컨트롤을 사용하여 mi.Selected = true를 설정할 때 StaticMenuItemSelected-Foreground = "Black"(또는 이와 비슷한) 스타일이 "트리거 됨"으로 설정할 수있다. 코드 숨김에, 맞지? – bomortensen

+0

컨트롤의 스타일을 지정하는 데 사용할 수있는 여러 태그가 있습니다. 메뉴 컨트롤을 스타일링하는 가장 쉬운 방법은 디자인보기에서 스마트 태그를 사용하고 스마트 태그 (스마트 태그 -> 자동 서식)에 스키마를 적용하는 것입니다. 스킴을 적용한 후 소스 뷰 (HTML 코드)로 돌아가서 메뉴 항목의 스타일을 지정하는 모든 태그를 확인합니다. 꽤 많이 보일 것입니다 (StaticSelectedStyle, StaticMenuItemStyle, StaticHoverStyle 등). – Jagd

+0

Jagd, 그게 완벽합니다! 그것은 내가하고 싶은대로 작동합니다 :) 고마워요! – bomortensen

0

"마지막"변수를 함수의 정적 멤버로 구현하는 것을 고려하십시오. 여기에 how it's done입니다. 그런 식으로 값은 함수 호출간에 유지됩니다. 페이지로드간에 유지되는지는 확실하지 않지만 테스트 할 수는 있습니다.

그렇지 않은 경우 ASP에 값을 기억하도록 지시해야합니다. 그것에 관해서는, 나는 덩어리 무게만큼 유용합니다.

+0

littlegreen 제안 해 주셔서 감사합니다. 정적 멤버 함수를 상기시킵니다. :) 불행히도 이번에는 내 문제를 해결하지 못했습니다. – bomortensen

관련 문제