2014-05-22 1 views
1

아래 주어진 aspx 페이지의 div가 있습니다. 데스크톱 및 모바일 코드와 스타일이 포함 된 페이지가 있습니다. 조건에 따라 show hide div를 보여주고 싶습니다. 모바일 위에 제공 "데스크톱과"되는 클래스를 사용하여, (페이지에 50 개 이상의 사업부) ID를 사용하여이 코드와 ID를 증가 "코드를 줄일 수 있습니다.div가 C에서 div 클래스를 사용하여 서버 측에서 false로 표시됩니다.

<div class="desktop" runat="server"> 
      <p>this desktop version1</p> 
     </div> 
     <div class="Mobile" runat="server"> 
      <p>this mobile version1</p> 
     </div> 
     <div class="desktop" runat="server"> 
      <p>this desktop version1</p> 
     </div> 
     <div class="Mobile" runat="server"> 
      <p>this mobile version1</p> 
     </div> 
     <div class="desktop" runat="server"> 
      <p>this desktop version1</p> 
     </div> 
     <div class="Mobile" runat="server"> 
      <p>this mobile version1</p> 
     </div> 
     <div class="desktop" runat="server"> 
      <p>this desktop version1</p> 
     </div> 

을 내가 DIV 클래스를 사용하여 숨기기 사업부를 표시 할 (서버 측에서하지 DIV ID). 마지막으로이에 관한 질의 회신 주시기 바랍니다 내가이의 해결책을 찾기

protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

. 댓글에서 언급 한 바와 같이

protected void Page_Load(object sender, EventArgs e) 
    { 
    string theClass; 
    theClass = "desktop"; 
     var theControls = FindByClass(theClass); 
     foreach (Control item in theControls) 
     { 
      //do something; 
      if (item is WebControl) 
      { 
       ((WebControl)item).Visible = false; 
      } 
      else 
      { 
       ((HtmlControl)item).Visible = false; 
      } 
     } 

    } 

    private IEnumerable FindByClass(string theClass) 
    { 
     Control[] allControls = FlattenHierachy(Page); 


     var theControls = from n in allControls 
          where ((n is WebControl) 
          && ((WebControl)n).CssClass.Contains(theClass)) 
          || (n is HtmlControl 
           && ((HtmlControl)n).Attributes.Count > 0 
           && ((HtmlControl)n).Attributes["class"] != null 
           && ((HtmlControl)n).Attributes["class"].IndexOf(theClass) > -1) 
          select n; 
     return theControls; 
    } 

    public static Control[] FlattenHierachy(Control root) 
    { 
     List<Control> list = new List<Control>(); 
     list.Add(root); 
     if (root.HasControls()) 
     { 
      foreach (Control control in root.Controls) 
      { 
       list.AddRange(FlattenHierachy(control)); 
      } 
     } 
     return list.ToArray(); 
    } 
+0

왜 ID를 사용하고 싶지 않은지 설명 할 수 있습니까? – Adil

+0

이것은 서버 측 계산이 아닌 css 및 미디어 쿼리의 경우와 같습니다. div 요소 간의 차이점은 무엇입니까? – sisve

+0

어쨌든 .. 각각의 유형을 그룹화 한 자신의'div's 그룹으로 이들을 분할 한 다음 표시하고 숨 깁니다. –

답변

1

, 그것은 미디어 첩을 사용하는 것이 훨씬 낫다 너의 케이스.

하지만 이유를 무시하고 질문에 답해 봅시다. 당신은 재귀 적으로 모든 컨트롤을 찾은 다음 숨길 수

private IEnumerable<HtmlGenericControl> FindControls(ControlCollection controls, string className) 
    { 
     foreach (Control control in controls) 
     { 
      var c = control as HtmlGenericControl; 
      if (c != null) 
      { 
       var classAttribute = c.Attributes["class"]; 
       if (classAttribute != null) 
        if (classAttribute.Equals(className)) 
         yield return c; 
      } 
      if (control.HasControls()) 
       foreach (var subControl in FindControls(control.Controls, className)) 
        yield return subControl; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     var a = FindControls(Page.Controls, "Mobile").ToList(); 
     a.ForEach(p=>p.Visible = false); 
    } 
0

당신은 jQuery를 사용하여이 작업을 수행 할 수 있습니다. 그냥 코드를 넣으십시오. 머리 꼬리표

<head runat="server"> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
function test() { 
    if(condition) 
    { 
     $(".first").hide(); 
    } 
    else 
    { 
     $(".first").show(); 
    } 
} 

</head> 

이제 시작 버튼 클릭과 같은 이벤트에서 이것을 호출하십시오. 그런 다음 조건을 숨기거나 'if'블록 안에 div를 표시하십시오. 이것은 나를 위해 잘 작동합니다.

관련 문제