2010-03-18 3 views
2

웹 개발자로 변환하는 Winforms 개발자. 마스터 페이지에 태그가있는 부분을 알고 있습니다. 명확하지 않은 것은 콘텐츠 페이지 중 하나에서 다른 태그를 가질 수 있거나 가질 수없는 경우입니다. 나는 두 가지 답변이 모두 검색되는 것을보고있다. 단 하나의 runat = server 만 있다면 네가 할 수 있다고 생각합니다. 것은 마스터 페이지가있는 웹 페이지에 여러 개의 라디오 버튼을 포함하고 있습니다. 나는 그것에 이름을 보내면 함수가있는 .js 파일을 가지고 있는데, 이것은 폼의 컨트롤을 통해 루프가 선택되어 어느 날짜가 선택되었는지를보고 원하는 날짜 지평선 (MTD, QTD, YTD 등)을 반환합니다. 이것을 마스터 페이지가 아닌 웹 페이지에서 실행하면 정상적으로 작동합니다. 그러나 마스터 페이지가있는 웹 페이지에서 실행할 때 요소에 연결할 수 없습니다. getElementByID를 시도해 보았습니다. 페이지 요소를 반복하여 반복 해 보았습니다. 아마도이 문제에 대해 잘못 생각하고 있습니다. 누군가가 나를 교정 할 수 있기를 바랍니다.<form> 마스터 페이지가 아닌 <form>에 어떻게 액세스합니까?

다음은 내 .js 파일의 코드입니다.이 코드는 내가 조금 더 나은 것을 설명하는 데 도움이 될 수 있습니다. formFieldName 함수와 DateRanges로 전달되는 아규먼트는

var frmDateRanges = document.getElementById(formFieldName); 
var chosen; 
var len = frmDateRanges.DateRanges.length; 
for(i=0;i<len;i++) 
    { 
    if(frmDateRanges.DateRanges[i].checked) 
     { 
     chosen = frmDateRanges.DateRanges[i].value; 
     } 
    } 

라디오 버튼에 주어진 이름 값이다. 나는이 함수를 호출 버튼에서

는 내가 가진 : onclick ="FunctionCall('frmDateRanges')" FunctionCall 단지 설명 목적을위한 'frmDateRanges는'나는대로 도움을 = ""양식 행동에

감사 주어진 이름과 ID입니다 이 시점에서 곤란을 겪었다. 이 작업을 수행하는 더 좋은 방법이 있다면 나에게도 알려주십시오.


클라이언트에서 HTML redered 아래 트림

var theForm = document.forms['aspnetForm']; 

경우 { theForm = document.aspnetForm (theForm!) } function __doPostBack (eventTarget, eventArgument) { if (! theForm.onsubmit()! (theForm.onsubmit()! = false)) { theForm .__ EVENTTARGET.value = eventTarget; theForm .__ EVENTARGUMENT.value = eventArgument; theForm.submit(); } }

<form id = "frmDateRanges" action = ""> 
     <dl> 
      <dt>&nbsp;Begin Date: &nbsp; &nbsp; End Date:</dt><dd><input name="ctl00$ContentPlaceHolder1$wpSettings$beginDT" type="text" id="ctl00_ContentPlaceHolder1_wpSettings_beginDT" style="width:67px;" /> 
       &nbsp;&nbsp; 
       <input name="ctl00$ContentPlaceHolder1$wpSettings$endDT" type="text" id="ctl00_ContentPlaceHolder1_wpSettings_endDT" style="width:67px;" /> 
       &nbsp; 
       <input id="btnBackOneDateRange" name = "btnBackOneDateRange" style="width: 20px; height: 21px" type="button" 
        value="<" onclick="BackOneDateRange('ctl00_ContentPlaceHolder1_wpSettings_beginDT', 'ctl00_ContentPlaceHolder1_wpSettings_endDT', 'frmDateRanges');"/> 
       <input id="btnForwardOneDateRange" style="width: 20px; height: 21px" type="button" 
        value=">" /></dd><dd> 

         &nbsp; 
         <input type="radio" id="btnTrl1Yr" name="DateRanges" style="width: 19px" value="1" onclick="GetTrailingYears('ctl00_ContentPlaceHolder1_wpSettings_beginDT', 'ctl00_ContentPlaceHolder1_wpSettings_endDT','1');" /> 
         1 Year 
         <input type="radio" id="btnTrl3Yr" name="DateRanges" style="width: 19px" value="3" onclick="GetTrailingYears('ctl00_ContentPlaceHolder1_wpSettings_beginDT', 'ctl00_ContentPlaceHolder1_wpSettings_endDT','3');" /> 
         3 Years &nbsp; 
         <input type="radio" id="btnTrl5Yr" name="DateRanges" style="width: 19px" value="5" onclick="GetTrailingYears('ctl00_ContentPlaceHolder1_wpSettings_beginDT', 'ctl00_ContentPlaceHolder1_wpSettings_endDT','5');" /> 
         5 Years 
         <input type="radio" id="btnTrl10Yr" name="DateRanges" style="width: 19px" value="10" onclick="GetTrailingYears('ctl00_ContentPlaceHolder1_wpSettings_beginDT', 'ctl00_ContentPlaceHolder1_wpSettings_endDT','10');" /> 
         10 Years</dd><dt><input type="radio" id="btnMthToDate" name="DateRanges" style="width: 19px" value="mth" onclick="GetMonthToDate('ctl00_ContentPlaceHolder1_wpSettings_beginDT', 'ctl00_ContentPlaceHolder1_wpSettings_endDT');" /> 
          Month&nbsp; 
          <input type="radio" id="btnQtrToDate" name="DateRanges" style="width: 19px" value="mth" onclick="GetQuarterToDate('ctl00_ContentPlaceHolder1_wpSettings_beginDT', 'ctl00_ContentPlaceHolder1_wpSettings_endDT');" /> 
          Quarter &nbsp;<input type="radio" id="btnYearToDate" name="DateRanges" style="width: 19px" value="mth" onclick="GetYearToDate('ctl00_ContentPlaceHolder1_wpSettings_beginDT', 'ctl00_ContentPlaceHolder1_wpSettings_endDT');" /> 
          Calendar Year</dt></dl> 

     </div> 
    </form> 
+0

클라이언트에서 렌더링 된 출력을 보여주는 (잘라낸) HTML 코드 조각을 보는 것이 유용 할 수 있습니다. – CJM

답변

2

몇 가지 :

  1. <form> 요소를 중첩 데이 아닌 법적 마크 업 : 일부 브라우저는 이것에 대해 다른 사람보다 더 관대하지만, 이렇게하면 당신은 이상한 행동을 볼 수 있습니다.
  2. ASP.NET 4 아래의 마스터 페이지를 사용하면 페이지에 렌더링 된 컨트롤 ID가 마크 업에서 컨트롤에 부여한 id과 정확히 일치하지 않는다는 것을 알 수 있습니다.이 ID는 해당 ID에 따라 변경됩니다. content placeholder와 (잠재적으로) DOM 트리에서 그 위에있는 다른 컨테이너들.

당신이, 당신이 시도하고 자바 스크립트의 일부가 당신을 위해 동적으로 생성해야 할 수 있다면, 당신은 출력 서버 컨트롤의 ClientID 재산, 당신은 아마도 DATERANGE의 이름을 전달해야합니다 수있는 방법 라디오 버튼 - 당신이 RadioButton 컨트롤을 선언 할 때 당신은 그것을 그룹 이름을 주어야한다 - 모든 라디오 버튼이 가지고 그런 식으로 같은 name (오히려 아이디 이상), 당신은 잠재적으로 첫 번째 옵션

FunctionCall('<%=Option1.ClientID%>'); 
의 이름으로 전달할 수 있도록

그런 다음 해당 개체에서 document.GetElementById을 호출하고 .name 속성을 요청하여 라디오 버튼 collec의 이름을 가져올 수 있습니다 해당 값으로 document.getElementsByName을 호출하십시오.

function FunctionCall(radioButtonId) { 
    var radioButtonList = document.getElementById(radioButtonId).name; 
    var radioButtons = document.getElementsByName(radioButtonList); 
    // radioButtons is an array of input type=radio, iterate as needed. 
} 
+0

고맙습니다. 코드 샘플을 구현했는데 매력적이었습니다. – VBCSharp

+0

+1, 이것이 바로 우리가하는 방식입니다. –

3

만 1 RUNAT = 콘텐츠 페이지에서 서버 형태를 가질 수있다. 작은 HTML 컨트롤 만이 만들어 지더라도 페이지의 다른 폼을 어지럽히는 것은 그 가치보다 혼란 스러울 수 있습니다.

콘텐츠 페이지에서 DOM 요소에 액세스하려고 할 때 요소가 포함 된 마스터 페이지가 모든 ID를 변경한다는 문제가 발생한다고 생각합니다. = "contentAreaId_controlID"/>

이 원인이 될 수 있음을

< ID 입력 : 당신이 당신의 렌더링 형태의 소스를 확인하는 경우는 ID 요소는 이제 콘텐츠 컨테이너 ID를 다음과 같이 사전에 보류를 볼 수 있습니다 문서 문제.getElementById (formFieldName);

+0

감사합니다. 마스터 페이지를 사용하여 컨트롤의 이름을 변경한다는 것을 알고 있습니다. 나는 보통 getElementById에서 <% = btnTest.ClientID>와 같은 것을 사용합니다. 나는 다른 종류의 컨테이너를 사용할 필요가 있을지도 모른다고 생각하고있다. – VBCSharp

관련 문제