2014-09-23 10 views
0

유니온 유형에 기반한 조건부 급여보고가있는 데이터베이스에서 동적 작업 목록을 만듭니다. 조건문을 처리하기 위해 cs 페이지의 pageload 섹션에서 aspx 페이지의 레이블에 출력하기 위해 데이터 집합을 작성하기로 결정했습니다. 모든 것이 예상대로 작동합니다. 문제는 HTML에서 JQuery 또는 Javascript를 실행하여 작업 제목을 축소하고 확장하여 요구 사항을 나타낼 때 발생합니다. JQuery, JS 및 Ajaxtookit을 사용하여이를 수행 할 수있는 방법이 많이 있습니다. 정적 HTML에서 모두 매력처럼 작동합니다. 그러나 .Net 스크립트에서 작동하지 않도록 레이아웃에 스패너를 던지는 스팬 태그를 출력에 추가합니다. 그런 다음 JQ 함수를 추가하여 span 태그를 제거한 다음 다른 스크립트 (페이지 맨 아래에 배치하여 페이지가로드 된 후 호출되도록 함)를 실행합니다. Document.ready 또는 window.load에는 영향이 없습니다. 페이지로드 및 페이지 렌더링 상태가 문제가 될 수 있습니다. 어떻게 작성된 HTML을 JQ와 JS에게 보일 수 있습니까? 감사합니다페이지로드 후 자바 스크립트가 보이지 않습니다.

CS :

protected void Page_Load(object sender, EventArgs e) 
    { 

     String strConnString96 = WebConfigurationManager.ConnectionStrings["JobList_ConnectionString"].ConnectionString; 
     OleDbConnection con96 = new OleDbConnection(strConnString96); 
     OleDbCommand cmd96 = new OleDbCommand("SELECT * FROM JOBS WHERE (Status = 'Open') AND (Approved = 'Yes')", con96); 
     OleDbDataAdapter da96 = new OleDbDataAdapter(cmd96); 
     DataTable dtJobList = new DataTable(); 
     da96.Fill(dtJobList); 
     con96.Close(); 

     if (dtJobList == null || dtJobList.Rows.Count == 0) 
      lblJobList.Text = "<h3>No positions available at this time.</h3>"; 

     if (dtJobList != null && dtJobList.Rows.Count > 0) 
     { 
      System.Text.StringBuilder sb1 = new System.Text.StringBuilder(); 

      int i = 0; 
      foreach (DataRow row in dtJobList.Rows) 
      { 

       string JobTitle = row["Job_Title"].ToString(); 
       string Func = row["Functions"].ToString(); 
       string Qual = row["Qualifications"].ToString(); 
       string ReqNum = row["Req_Number"].ToString(); 
       string Low = row["Low_Range"].ToString(); 
       string High = row["High_Range"].ToString(); 
       string SalType = row["Salary_Type"].ToString(); 
       string Union = row["Union"].ToString(); 
       i++; 



       sb1.Append("<div id='JobNbr-" + i + "'><h4>" + JobTitle + "</h4><h5>Essential Functions</h5><p>" + Func + "</p><h5>Qualifications</h5><p>" + Qual + "<p>"); 

       if (Union == "Executive" || Union == "Local 6" || Union == "C93") 
       { 

        sb1.AppendLine("<h5>Starting Salary</h5><p>" + Low + " - " + High + " <i>(" + SalType + ")</i>");                   
       } 

       else 
       { 
        sb1.AppendLine("<h5>Starting Salary</h5><p>" + High + " <i>(" + SalType + ")</i>"); 

       } 

       sb1.AppendLine("<a href='/HR_WebForm/HR_Form.aspx?Req_Number=" + ReqNum + "&Job_Title=" + JobTitle + "'><img src='/Resources/icons/apply.gif' alt='Apply' /></a></p></div>"); 

       lblJobList.Text = sb1.ToString(); 
      } 


     } 
    } 

ASPX는 :

<asp:Content ID="Content4" ContentPlaceHolderID="ContentPlaceHolderMain" runat="server"> 



<h1>Employment</h1> 

    <div id="Employment"> 
    <h2>Join New England's largest retail water &amp; sewer provider!</h2> 

<h2>How to Apply:</h2> 

<ol><li>Submit your resume and cover letter online, please send attachments in PDF or Microsoft Word format, if not please fax to 617-989-7754 OR</li> 

<li>Visit our Human Resources Department at 980 Harrison Avenue Boston, MA 02119</li></ol> 

<p>We are located on several MBTA bus routes and visitors' parking is available on-site. Our office is open Monday through Friday, 8:00AM to 5:00PM. 
</p> 

<p>Come join our team!</p> 

<h2>Current Openings</h2> 

<div id="CurrentOpenings"> 

    <a id="On" name="On" onclick="openAll('CurrentOpenings', 'h4','');" href="#_" class="hideIfNoJS">Open All</a> 
    <a id="Off" name="Off" onclick="closeAll('CurrentOpenings', 'h4','');" href="#_" class="hideIfNoJS">Close All</a> 

<asp:Label ID="lblJobList" runat="server" Text="Label" /> 


</div> 

    <script>window.onload = "setCollapseExpand('CurrentOpenings', 'h4',''); revealControl('On'); revealControl('Off');"</script> 
<script type="text/javascript" src="/JScode/expandcollapse.js"></script> 
</asp:Content> 

답변

0

당신은 문자열로 창로드를 설정하고 있습니다.

window.onload = "setCollapseExpand('CurrentOpenings', 'h4',''); revealControl('On'); revealControl('Off');"</script> 

기능이 필요합니다. 이 jquery에 태그를 지정 했으므로이 태그를 사용하십시오.

$(window).on("load", function() { 
    setCollapseExpand('CurrentOpenings', 'h4',''); 
    revealControl('On'); 
    revealControl('Off'); 
}); 
+0

감사합니다. 그러나 작동하지 않았습니다. 마스터 페이지를 사용하고 있습니다. 원래 온로드는 body 태그에있었습니다. 동일한 접근법은 정적 인 FAQ 페이지에서 작동합니다. 내가 다른 확장/축소 스크립트를 시도하고 아무도 내가 그것을하고있는 방식으로 동적 인 출력에 일한 적이 없다. 나는 JQ에 span 태그를 보도록 할조차 할 수 없다. 조건부 출력이 아닌 경우 listview를 사용합니다. 그런 식으로 인라인 코드로 처리하려고했지만 인라인 코드 블록 내에서 eval식이 작동하지 못했습니다. static에 clientID를 설정했지만 span 태그가 내 코드에 첨부되지 않도록하지는 않습니다. 아! –

+0

해결책을 찾았습니다. .Net 문서에 따르면 동적으로 생성 된 콘텐츠가 반드시 페이지 수명주기를 엄격하게 준수하지는 않기 때문에 타이밍이 약간 지체 될 수 있습니다. body 태그 아래에 새로운 내용 자리 표시자를 추가하면 JS가 호출되기 전에 내 표가 렌더링되기에 충분한 지연이 추가되었습니다. 닫는 body 태그가 끝나기 전에 마지막 요소로 JS 코드를 배치하기 만하면됩니다. 각 자리 표시자는 다음 렌더링으로 넘어 가기 전에 완전히 렌더링되는 것으로 보입니다. 문장의 끝에있는 기간처럼 행동해서, 그 작은 멈춤이 전부였습니다. –

+0

내용이 Ajax에 의해로드되지 않는 한, 코드는 거기에 있어야합니다. – epascarello