자식창에서 부모창의 이벤트 실행하기
자식창에 있는 값을 부모창에 바로 반영하고 싶을 경우
보통 스트립트로 자식창의 값을 부모창에 넘긴다음
부모창의 변경된 내용을 submit시킴으로써 일괄적으로 처리합니다.
하지만 가끔 자식창에서 부모창으로 값을 넘기면서 바로 DB처리를 해야 할 경우가 있을지도 모릅니다. 그럴때 이용하는 방법입니다.
다음은 자식창에서 입력한 텍스트값을 부모창의 링크버튼 이벤트를 이용하여
부모창의 리스트박스에 추가하는 소스로 두가지 방법을 사용해서 만들어 보았습니다.
자세한 내용은 첨부한 소스코드를 참고하세요.
--- 아래는 팝업페이지의 소스코드 일부입니다..
<script language="javascript">
<!--
// __doPostBack에 인지값을 직접 넘기는 방법
function ListBoxAdd1()
{
var strValue = document.all["txtValue"].value;
opener.__doPostBack('lnkEvent1', strValue);
}
// 부모창의 hidden input 으로 넘겨서 받는 방법
function ListBoxAdd2()
{
opener.document.all["hidValue"].value = document.all["txtValue"].value;
opener.__doPostBack('lnkEvent2', '');
}
//-->
</script>
<INPUT type="text" id="txtValue">
<INPUT type="button" value="추가(방법1)" onclick="ListBoxAdd1();">
<INPUT type="button" value="추가(방법2)" onclick="ListBoxAdd2();">
-- 아래는 부모창의 소스코드 일부입니다.
-- 자식창에서 __doPostBack을 사용하시려면 링크버튼을 이용하시는게 편리합니다.
-- 링크버튼을 사용하시면 컴파일후 부모창에 __doPostBack 스크립트 함수를 자동으로 생성해주기 때문이죠.
<aspx>
<asp:ListBox id="ListBox1" runat="server">
<asp:ListItem Value="선택하세요">값을 추가해주세요.</asp:ListItem>
</asp:ListBox>
<asp:LinkButton id="lnkEvent1" runat="server"></asp:LinkButton>
<asp:LinkButton id="lnkEvent2" runat="server"></asp:LinkButton>
<input type="hidden" id="hidValue">
<cs>
// RaisePostBackEvent를 이용해서 인자값 받기
string newValue = null;
protected override void RaisePostBackEvent
(IPostBackEventHandler sourceControl, string eventArgument)
{
newValue = eventArgument;
base.RaisePostBackEvent (sourceControl, eventArgument);
}
private void lnkEvent1_Click(object sender, System.EventArgs e)
{
if(newValue != null)
ListBox1.Items.Add(newValue );
}
// hidden값에 인자값을 넣어서 받기
private void lnkEvent2_Click(object sender, System.EventArgs e)
{
if(Request["hidValue"] != null)
ListBox1.Items.Add(Request["hidValue"]);
}