0

aspx 마스터/콘텐츠 페이지 시나리오가 있습니다. 상위 페이지에는 child.aspx를 가리키는 IFrame이 있습니다. child.aspx에는 child.aspx의 page_load에서 다음 로직에 따라 확인란을 표시하거나 숨기려고합니다. - child.aspx가 직접 열리면 확인란을 표시해야합니다. - iframe에서 child.aspx를 연 경우 체크 상자를 숨겨야합니다. 기본적으로 child.aspx에 부모 창이 포함되어 있는지 확인한 다음 확인란 컨트롤을 숨기려면 그렇지 않으면 표시하고 싶습니다.asp.net의 서버 쪽 page_load 이벤트에서 JS 반환 값 가져 오기

상위 창에서 열 었는지 여부에 따라 좀 더 많은 논리를 실행해야하므로 Page_load 이벤트의 코드 숨김 코드에서 표시/숨기기 코드를 선호합니다. RegisterClientScriptBlock, 내가 JS에 오류가 사용 client.aspx.cs

protected void Page_Load(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "DoesParentExists", "DoesParentExists()", true); 
    if (hfDoesParentExist.Value == "true") 
    { 
     chkValid.Visible = false; 
    } 
} 

에 child.aspx

<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server"> 

    <script language="javascript" type="text/javascript"> 
    function DoesParentExists() 
    { 
     var bool = (parent.location == window.location)? false : true; 
     var HClientID ='<%=hfDoesParentExist.ClientID%>'; 
     document.getElementById(HClientID).Value = bool; 
    }   
    </script> 
    <div>   
     <h2>Content - In IFrame</h2> 
     <asp:HiddenField runat="server" id="hfDoesParentExist" /> 
     <asp:CheckBox ID="chkValid" runat="server" /> 
     <asp:ImageButton ID="ImageButton_FillW8Online" ImageUrl="~/images/expand.gif" 
     OnClick="btnVerify_Click" runat="server" style="height: 11px" />  
    </div> 
</asp:Content> 

에서 :

은 지금까지 나는 다음을했다. hfDoesParentExist 객체가 존재하지 않습니다. '컨트롤이 아직 생성되지 않았다면. 권리? 내가 RegisterStartupScript를 사용하려했지만 코드 숨김에서 항상 숨겨진 변수에 null이 생깁니다. 버튼 클릭이나 그와 비슷한 것을 사용하고 싶지 않습니다. page_load 이벤트에서만 필요합니다. 문제를 해결하는 방법?

답변

1

이 줄 :

document.getElementById(HClientID).Value = bool; 

가되어야한다 (소문자 value) 또한

document.getElementById(HClientID).value = bool; 

당신은 현재 실행 문맥에서 자바 스크립트 레지스터 콜백 설정 숨겨진 필드의 값을 확인할 수 없습니다 서버 쪽.

체크 상자를 숨기거나 표시하려면 논리를 클라이언트 측으로 이동 시키십시오. 필드를 실제로 페이지에서 제거해야하는 경우 자바 스크립트로도이를 수행 할 수 있습니다.

function DoesParentExists() 
{ 
    var bool = (parent.location == window.location)? false : true; 
    var cehckboxId ='<%=chkValid.ClientID%>'; 
    if(bool){ 
     document.getElementById(cehckboxId).style.display = 'none'; 
    } 
    else { 
     document.getElementById(cehckboxId).style.display = 'block'; 
    } 
}  

div와 함께 확인란을 감싸고 레이블을 포함하도록 컨테이너를 숨길 수 있습니다.

0

서버 쪽에서는 querystring 매개 변수를 사용합니다. 부모 페이지에 ?inframe=1을 추가하여 하위 페이지를로드하십시오. 그런 다음 Page_Load에서 해당 값을 확인하십시오.